技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 22723

|
做了兩個:一個是純函數(shù)版,不過函數(shù)有限制,所以沒有用所有的數(shù)據(jù),而且因?yàn)樵跀?shù)據(jù)驗(yàn)證中無法使用多維引用和內(nèi)存數(shù)組,所以對數(shù)據(jù)源結(jié)構(gòu)作了些修改。
- =OFFSET($E$2,,,COUNTA($E:$E))
- =OFFSET($B$1,MATCH($H$3,$A:$A,)-1,,COUNTIF($A:$A,$H$3))
- =OFFSET($B$1,MATCH($H$5,$A:$A,)-1,,COUNTIF($A:$A,$H$5))
復(fù)制代碼
另一個是代碼版,這個除了生孩子其他什么都會的代碼,就沒那么多顧慮了,數(shù)據(jù)源該是什么樣就是什么樣。
- Private Sub Worksheet_selectionChange(ByVal Target As Range)
- Dim MyRow As Long, i As Long
- Dim MyStr As String
- MyRow = Cells(Rows.Count, 1).End(xlUp).Row
- '省
- If Target.Address = "$G$4" Then
- For i = 2 To MyRow
- If Application.CountIf(Range("a1:a" & i - 1), Cells(i, 1)) = 0 Then
- MyStr = MyStr & "," & Cells(i, 1)
- End If
- Next
- MyStr = Mid(MyStr, 2, MyRow * 8)
- With Target.Validation
- .Delete
- .Add Type:=xlValidateList, Formula1:=MyStr
- End With
- End If
- '市
- If Target.Address = "$G$6" Then
- For i = 2 To MyRow
- If Cells(i, 1) = Range("g4") Then
- If Application.CountIf(Range("b1:b" & i - 1), Cells(i, 2)) = 0 Then
- MyStr = MyStr & "," & Cells(i, 2)
- End If
- End If
- Next
- MyStr = Mid(MyStr, 2, MyRow * 8)
- With Target.Validation
- .Delete
- .Add Type:=xlValidateList, Formula1:=MyStr
- End With
- End If
- '縣
- If Target.Address = "$G$8" Then
- For i = 2 To MyRow
- If Cells(i, 2) = Range("g6") Then
- If Application.CountIf(Range("c1:c" & i - 1), Cells(i, 3)) = 0 Then
- MyStr = MyStr & "," & Cells(i, 3)
- End If
- End If
- Next
- MyStr = Mid(MyStr, 2, MyRow * 8)
- With Target.Validation
- .Delete
- .Add Type:=xlValidateList, Formula1:=MyStr
- End With
- End If
- End Sub
復(fù)制代碼
|
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?注冊
x
|