链接多个下拉菜单和删除/隐藏重复项

时间:2014-05-20 09:58:50

标签: excel excel-vba drop-down-menu excel-formula excel-2010 vba

我在Excel中有4个下拉菜单,读取相同的范围。

我使用了'数据验证'中的下拉菜单。

我想删除/隐藏已在其他下拉菜单中选择的选项(即其他3)。当然,如果用户改变了对某个选择的想法,我希望选项/选择重新出现在每个下拉菜单中。

我曾试图谷歌,但我没有太多运气。

谢谢。

1 个答案:

答案 0 :(得分:0)

有这个样本:

enter image description here

使用名为DataVal1的验证范围(来自E4:E10),使用以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim LstVal(1 To 10) As String
Dim Tmp(1 To 10)
Dim Coll As New Collection
Dim Vali As Integer
Dim i, x As Integer
Dim DropLst
Dim Dval
Dim xx
Dim SRange As String

SRange = "B4:B8"

Vali = 1
For Each DropLst In Range(SRange)
    Set Coll = Nothing
    For Each Dval In Range("DataVal1")
        Coll.Add Dval.Value
    Next

    For Each xx In Range(SRange)
        If DropLst.Address = xx.Address Then GoTo ENext
        For x = 1 To Coll.Count
            If Coll(x) = xx.Value Then
                Coll.Remove (x)
                GoTo ENext
             End If
        Next
ENext:
    Next

    Tmp(Vali) = ""
    For i = 1 To Coll.Count
        If (Tmp(Vali) <> "") Then Tmp(Vali) = Tmp(Vali) & "," & Coll(i)
        If (Tmp(Vali) = "") Then Tmp(Vali) = Tmp(Vali) & Coll(i)
    Next

    With DropLst.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Tmp(Vali)
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    Vali = Vali + 1
Next
End Sub

当您更改一个下拉列表的验证时,另一个下载将使用新的动态列表进行验证 使用此代码,您可以添加所需的验证数量,更改SRange范围...
如果您希望验证单元格不在附近,则需要编写一些代码...