从下拉列表中删除选定的项目

如果我在第一个下拉列表中select'B',剩下的下拉列表有A,C,D,E,如果我在第一个下拉列表中select'C',剩下的下拉列表中有下面的值A,B,C,D,E A,B,D,E反之亦然。

有人知道该怎么做吗?

假设我们希望五个单元格A1E1的初始下拉是:

α,β,γ,δ,ε

首先运行这个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选项作为单元格B1E1的选项被删除,因此将以下事件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,并将这个项目作为B1E1的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下拉列表。
在这里输入图像说明

在这里输入图像说明

在这里输入图像说明