Excel 制作数据有效性下拉菜单后,选项里如何筛选不重复值-vba程序
- Private Sub Worksheet_SelectionChange(ByVal Target As Range)
- If Target.Count > 1 Then Exit Sub
- If Target.Column > 2 Or Target.Row < 3 Then Exit Sub
- Dim d, i&, Myr&, Arr, r%, Arr1(), cp$, ks&, js&, j&
- Set d = CreateObject("Scripting.Dictionary")
- Set d1 = CreateObject("Scripting.Dictionary")
- Myr = Sheet1.[a65536].End(xlUp).Row
- Arr = Sheet1.Range("a3:c" & Myr)
- For i = 1 To UBound(Arr)
- If Arr(i, 1) <> "" Then
- x = Arr(i, 1) & "|" & Arr(i, 2)
- d(Arr(i, 1)) = d(Arr(i, 1)) & i & ","
- d1(x) = Arr(i, 3)
- End If
- Next
- k = d.keys
- If Target.Column = 1 Then
- With Target.Validation
- .Delete
- .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
- Operator:=xlBetween, Formula1:=Join(d.keys, ",")
- End With
- Target.Offset(0, 1) = ""
- ElseIf Target.Column = 2 And Target.Offset(0, -1) <> "" Then
- t = d(Target.Offset(0, -1).Value)
- t = Left(t, Len(t) - 1)
- If InStr(t, ",") Then
- aa = Split(t, ",")
- For j = 0 To UBound(aa)
- cp = cp & Arr(aa(j), 2) & ","
- Next
- cp = Left(cp, Len(cp) - 1)
- With Target.Validation
- .Delete
- .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
- Operator:=xlBetween, Formula1:=cp
- End With
- Else
- With Target.Validation
- .Delete
- End With
- Target = Arr(t, 2)
- End If
- End If
- Set d = Nothing
- End Sub
复制代码
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。