創建多級下拉列表很簡單,但是如果你忽略了這點,後果非常嚴重

為了提高數據錄入速度,也為了在錄入數據的時候強制統一,製作下拉列表是一個常見的做法。如下圖,在【客戶信息表】,如何在"省份"和"城市"字段快速製作多級下拉列表呢?

創建多級下拉列表很簡單,但是如果你忽略了這點,後果非常嚴重

創建步驟

1. 建立下拉列表序列數據。

創建多級下拉列表很簡單,但是如果你忽略了這點,後果非常嚴重

第一步就是要建立下拉列表的的序列數據。就是說,將客戶的省份數據和城市的數據全部錄入到指定位置。舉例如下圖:

注意,最好按照上圖中的格式來組織數據(【省份】一列,每個省份對應的城市在同一列。

2. 創建名稱-自定義區域

選中所有序列數據(利用定位條件跳過空值),"根據所選怎內容創建名稱",操作看動圖:

創建多級下拉列表很簡單,但是如果你忽略了這點,後果非常嚴重

通過這幾步操作已經為指定數據區域創建了名稱。

3. 通過"數據驗證"製作下拉列表

a) 省份字段的數據序列很簡單"=省份"。

創建多級下拉列表很簡單,但是如果你忽略了這點,後果非常嚴重

b) 城市字段的數據需要根據省份的變化而變化,所以要用一個間接引用函數indirect。"=indirect($B2)"

創建多級下拉列表很簡單,但是如果你忽略了這點,後果非常嚴重

到這一步,我們就已經快速地建立和多級下拉列表。在實際使用的情況就是,通過下拉菜單選擇"省份",再通過下拉菜單選擇這個省份中對應的"城市"。

可以說是相當方便了,既提高了效率又避免了錄入不規範的數據。

可是,可能沒有人告訴你,這裡面還有一個大BUG

假設一個情景,我先選擇了"廣東"-"廣州",然後再在此基礎上想修改成"廣西"-"南寧"。當將"廣東"改為"廣西"的時候,"城市"字段的"廣州"不會有任何變化,我需要手動重新選擇為"南寧"。

但是,問題就出在這裡了,如果我將省份改為"廣西",一不小心忘記將"廣州"改為"南寧"了,Excel不會有任何錯誤提示!

這樣就會出現了尷尬的"廣西-廣州",顯然這是一個明顯的邏輯錯誤!

實現效果如下動圖:

創建多級下拉列表很簡單,但是如果你忽略了這點,後果非常嚴重

代碼的邏輯很簡單,當B列某單元格的數據發生改變的時候,那麼C列同一行的單元格內容自動清空。

代碼:

Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Column = 2 Then
Cells(.Row, 3).ClearContents
End If
End With
End Sub

如果你希望用這段代碼,你需要理解並相應地修改列參數。

如果還有不清楚的地方,留言評論,或者私信/私聊我。

總結

如果你的工作情景中需要用到和案例類似的多級下拉列表,那麼一定要記得加上後面那一段VBA代碼,否則一旦出錯後果很嚴重。

我是微軟認證講師MCT,關注我,一起玩Office。


分享到:


相關文章: