當前位置: 妍妍網 > 辦公

一個公式,搞定多級下拉選單

2024-04-17辦公

在Excel365中設定數據驗證時,對於數據來源中的重復值單元格下拉選單中會自動去除重復,只保留不重復值。如下圖,在數據驗證中選擇包含重復值的B3:B6單元格區域為數據來源:

設定完成後,單擊下拉按鈕,彈出的備選項中只保留一個A和一個B,自動去掉了重復值。

利用這個特性,可以在Excel 365中利用一個公式,實作任意N級的關聯下拉選單。

如下圖,在名稱為「數據」的工作表中以標準二維表的方式儲存著省、市、縣、區的資訊( 數據來源於Excelhome會員的分享帖 ):

要求在另外一個工作表中生成如下圖的級聯下拉選單:

操作步驟如下:

步驟1: 單擊A2單元格,在數據驗證中,選擇數據來源為「數據」工作表的A列「省」資訊。

步驟2: 單擊B2單元格,利用以下公式定義「下拉選單」的名稱:

=LET(s,BYROW(數據!$A2:A37,LAMBDA(x,CONCAT(x))),t,CONCAT(數據驗證!$A2:A2),OFFSET(數據!B1,MATCH(t,s,),,SUM(N(s=t))))

步驟3: 選中B2:D2單元格區域,在數據驗證中的「來源」處輸入以下公式:

="下拉選單"

設定完成後,B列會根據A列內容返回下拉選單內容:

C列會根據A列和B列資訊返回下拉選單內容:

D列會根據A列、B列和C列的資訊返回下拉選單內容:

上述用於定義名稱的公式主要使用了相對參照偏移的技巧,下面簡要說明一下公式的原理。

在B2單元格時 ,「下拉選單」名稱對應的公式為(公式截圖時將公式放在了B4單元格,但公式仍是B2單元格的公式,下同):

=LET(s,BYROW(數據!$A2:A37,LAMBDA(x,CONCAT(x))),t,CONCAT(數據驗證!$A2:A2),OFFSET(數據!B1,MATCH(t,s,),,SUM(N(s=t))))

上述公式中定義的名稱「s」按行合並「數據」工作表中的A2:A37的內容,由於只有「省」,所以只返回省份資訊。

公式中定義的名稱「t」合並B2單元格左側的 A2:A2單元格 內容,此時也只返回省份名稱「廣東」。

匹配t(「廣東」)在s(只包含省資訊的字串)中的位置,就是「數據」工作表中「廣東」的起始位置,統計t在s中出現的次數,就是「廣東」的數據行數。然後使用OFFSET函式獲取「廣東」右側的「市」資訊。

在C2單元格時 ,「下拉選單」名稱對應的公式為(由於使用了相對參照,所以數據參照範圍自動進行了擴充套件,如下圖紅色方框部份):

=LET(s,BYROW(數據!$A2:B37,LAMBDA(x,CONCAT(x))),t,CONCAT(數據驗證!$A2:B2),OFFSET(數據!C1,MATCH(t,s,),,SUM(N(s=t))))

上述公式中定義的名稱「s」按行合並「數據」工作表中的A2:B37的內容,也即「省+市」的資訊。

公式中定義的名稱「t」合並C2單元格左側的 A2:B2單元格 內容,此時返回省份+市的資訊「廣東廣州」。

匹配t(「廣東廣州」)在s(省+市的字串)中的位置,就是「數據」工作表中「廣東省廣州市」的起始位置,統計t在s中出現的次數,就是「廣東廣州」的數據行數。然後使用OFFSET函式獲取「廣東廣州」右側的「區」資訊。

「下拉選單」名稱在D列會按同樣的方式,自動將相對參照擴充套件,因此再多級別也能自動適應,從而達到一個公式實作N級下拉選單的目的。

範例檔:

https://pan.baidu.com/s/1CzrFKi4KMliF64pk60KELw?pwd=cejx

圖文制作:超人

原載:超人一籌高效辦公