數(shù)據(jù)有效性可以產(chǎn)生下拉列表,那么是否可以產(chǎn)生相互關聯(lián)的多級下拉列表呢?
類似如下效果:
答案是完全可以的。
數(shù)據(jù)有效性配合函數(shù)也可做出這種效果,這篇文章只講解用VBA的方式實現(xiàn)相互關聯(lián)的多級下拉列表。
看一下數(shù)據(jù)源:
假如我們手里的數(shù)據(jù)源是這樣的。
解決思路:
因為省份和城市都存在重復字段,我們需要去重復再設置數(shù)據(jù)有效性。
『用字典對象獲取省份名稱去重復作為數(shù)據(jù)有效性序列的來源,完成一級下拉列表;同樣,利用字典將市名去重復后作為二級下拉列表;三級下拉列表同樣的辦法。』
因為要實現(xiàn)聯(lián)動的效果,所以我們要結合工作表事件Worksheet_SelectionChange來完成。
代碼及知識點:
就不拿代碼湊字數(shù)了,附件公眾號后臺回復“有效性”獲取。
幾個小知識點
?Join函數(shù)
語法:Join(List[,delimiter])
參數(shù)說明:
?List?-必需的參數(shù),包含被連接子字符串的一維數(shù)組。注意是一維數(shù)組。
?Delimiter?-一個可選參數(shù),在返回字符串中用于分隔子字符串的字符。如果忽略該項,則使用空格(" ")來分隔子字符串。
通俗來講,Join函數(shù)就是把一維數(shù)組每個元素通過某個設定的字符串連接起來成為一個字符串。和它作用相反的函數(shù)是split函數(shù)。
?Offset函數(shù)
代碼中多次用到offset函數(shù),主要就是因為是對B列省份數(shù)據(jù)做的循環(huán),需要用Offset函數(shù)來獲取同一行市名和縣名數(shù)據(jù)。
語法:Range.Offset(行偏移數(shù),列偏移數(shù))
參數(shù)說明:
?行偏移? -??正數(shù),負數(shù),零值(或者不寫),正代表向下偏移,負數(shù)向上。
?列偏移??-??正數(shù),負數(shù),零值(或者不寫),正代表向右偏移,負數(shù)向左。
注意:偏移的只是位置,單元格或者單元格區(qū)域內(nèi)容不會跟著移動。
?設置數(shù)據(jù)有效性部分代碼
錄制宏得到,這么難的代碼誰記得住,用到時候錄制一下即可。
- END -
推薦閱讀:
你的小黃鴨來了~??|??操作Txt??|??VBA學習經(jīng)驗??|??合并拆分??|???字符串函數(shù)??|?循環(huán)知識