本帖最后由 lisongmei 于 2024-7-25 17:36 编辑
lisongmei 发表于 2024-7-25 17:14
那你这个只能用代码定制一个数据有效性了。
只针对当前区域写了个,扩展动态区域自己扩展一下吧,很简单
[Visual Basic] 纯文本查看 复制代码 Sub demo()
Dim dic, i%, arr, k$, sr$
Set dic = CreateObject("scripting.dictionary")
arr = Range("a2:b13") '这里写死的,需扩展
For i = 2 To 13 '这里写死的,需扩展
k = Range("a" & i).Value
dic(k) = Range("b" & i).Value & "," & dic(k)
Next
Range("i3:i10").Validation.Delete '这里写死的,需扩展
Range("i3:i10").ClearContents '这里写死的,需扩展
For i = 3 To 10 '这里写死的,需扩展,以及上面,下面的A,H,I列都写死的,若转到其他列,需要修改
k = Range("h" & i).Value
If dic.exists(k) Then
If VBA.InStr(Left(dic(k), Len(dic(k)) - 1), ",") > 0 Then
With Range("i" & i).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=dic(k)
End With
Else
Range("i" & i).Value = Left(dic(k), Len(dic(k)) - 1)
End If
End If
Next
End Sub
|