从下拉列表中删除选定的项目
如果我在第一个下拉列表中select'B',剩下的下拉列表有A,C,D,E,如果我在第一个下拉列表中select'C',剩下的下拉列表中有下面的值A,B,C,D,E A,B,D,E反之亦然。
有人知道该怎么做吗?
假设我们希望五个单元格A1到E1的初始下拉是:
α,β,γ,δ,ε
首先运行这个macros:
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
由于我们希望我们的A1选项作为单元格B1到E1的选项被删除,因此将以下事件macros放在工作表代码区域中:
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
这个macros将检测我们对A1的select,并将这个项目作为B1到E1的select。
如果您想直接在工作表上执行此操作,则可以在数据validation列表中使用表格函数“IF”,“ISNUMBER”和“SEARCH”的组合。 每个下拉列表都需要不同的数据validation列表。 第一个数据validation列表只有值A,B,C,D,E,但是2.列表具有以下function:
= IF(ISNUMBER(SEARCH(A1; A $ 7));“”;“A”)
= IF(ISNUMBER(SEARCH(A2; A $ 7));“”;“B”)
= IF(ISNUMBER(SEARCH(A3; A $ 7));“”;“C”)
= IF(ISNUMBER(SEARCH(A4; A $ 7));“”;“D”)
= IF(ISNUMBER(SEARCH(A5; A $ 7));“”;“E”)
其中A7是具有第一个下拉列表的单元格,3.列表具有function
= IF(ISNUMBER(SEARCH(B1; B $ 7));“”;“A”)
= IF(ISNUMBER(SEARCH(B2; B $ 7));“”;“B”)
= IF(ISNUMBER(SEARCH(B3; B $ 7));“”;“C”)
= IF(ISNUMBER(SEARCH(B4; B $ 7));“”;“D”)
= IF(ISNUMBER(SEARCH(B5; B $ 7));“”;“E”)
其中B7是具有第二个下拉列表的单元格,以及4.和5.列表
一些图片。 对不起,对话框是德语,但我想你知道如何做一个数据validation下拉列表。