2015-05-02 16 views
1

У меня есть 5 раскрывающихся списков со следующими значениями A, B, C, D, E если я выбрать 'B' в первом выпадающем списке, остальные выпадающие имеют A, C, D, E если я выбираю «C» в первом выпадающем списке, остальные выпадающие списки имеют A, B, D, E vise versa.Удалить выбранные элементы из выпадающего списка

Кто-нибудь знает, как это сделать?

+0

Ваши списки выпадающих непосредственно на листе или вы используете какое-то формы-объекты? если первый вам не нужен VBA – OlimilOops

+0

мои выпадающие списки непосредственно на листе – phani

ответ

0

Если вы хотите сделать это прямо на листе, вы можете использовать комбинацию табличных функций «IF», ​​«ISNUMBER» и «SEARCH» в вашем списке валидации данных. Для каждого раскрывающегося списка вам нужны разные списки проверки данных. Первый список валидации данных имеет только значения A, B, C, D, E, но список 2. имеет следующие функции:
= IF (ISNUMBER (SEARCH (A1; A $ 7)); ""; "A")
= ЕСЛИ (ЕЧИСЛО (ПОИСК (А2, А $ 7)); ""; "В")
= ЕСЛИ (ЕЧИСЛО (ПОИСК (А3, А $ 7)); ""; "С")
= ЕСЛИ (ЕЧИСЛО (ПОИСК (А4, A $ 7)); ""; "Д")
= ЕСЛИ (ЕЧИСЛО (ПОИСК (А5, А $ 7)); ""; "Е")

, где А7 является ячейка с первым выпадающим списком, список 3. имеет функции

= IF (ISNUMBER (ПОИСК (B1; B $ 7)); ""; "A")
= IF (ISNUMBER (SEARCH (B2; В $ 7)); ""; «B»)
= IF (ISNUMBER (SEARCH (B3; B $ 7)); ""; "C")
= IF (ISNUMBER (SEARCH (B4; B $ 7)); ""; "D");
= ЕСЛИ (ЕЧИСЛО (ПОИСК (В5, B $ 7)); ""; "Е")

, где В7 является клетка со вторым DropDownList, и так далее с 4 и 5. список

некоторые фотографии. жаль, что диалоговое окно находится на немецком языке, но я думаю, вы знаете, как сделать выпадающий список проверки данных.
enter image description here

enter image description here

enter image description here

1

Скажем, мы хотим начальные раскрывающихся меню на пять ячеек A1 через E1 быть:

Альфа, Бета, Гамма, Delta, Epsilon

Первый запуск этого макроса:

Sub InternalString() 
    Dim MyCells As Range, FullString As String 
    Dim r As Range 
    Set MyCells = Range("A1:E1") 
    FullString = "Alpha,Beta,Gamma,Delta,Epsilon" 
    Application.EnableEvents = False 

     With MyCells.Validation 
      .Delete 
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
      Operator:=xlBetween, Formula1:=FullString 
      .IgnoreBlank = True 
      .InCellDropdown = True 
      .InputTitle = "" 
      .ErrorTitle = "" 
      .InputMessage = "" 
      .ErrorMessage = "" 
      .ShowInput = True 
      .ShowError = True 
     End With 
    Application.EnableEvents = True 
End Sub 

Public Function RemoveItem(st As String, drop As String) As String 
    RemoveItem = Replace(Replace(st, drop, ""), ",,", ",") 
End Function 

enter image description here

Поскольку мы хотим, чтобы наш выбор для A1 быть удалены в качестве опции для клеток B1 через E1, поместите следующий макрос событий в рабочая область таблицы:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim A1 As Range, v As String, PartString As String 
    Dim FullString As String 
    FullString = "Alpha,Beta,Gamma,Delta,Epsilon" 
    Dim rng As Range 
    Set A1 = Range("A1") 
    Set rng = Range("B1:E1") 

    If Intersect(A1, Target) Is Nothing Then Exit Sub 

    v = A1.Value 
    PartString = RemoveItem(FullString, v) 
    With rng.Validation 
     .Delete 
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
      Operator:=xlBetween, Formula1:=PartString 
      .IgnoreBlank = True 
      .InCellDropdown = True 
      .InputTitle = "" 
      .ErrorTitle = "" 
      .InputMessage = "" 
      .ErrorMessage = "" 
      .ShowInput = True 
      .ShowError = True 
    End With 

End Sub 

Этот макрос обнаружит наш choi ce для A1 и удалите изделие по выбору для B1 via E1.

enter image description here

Смежные вопросы