首頁 > 繪畫

動態下拉列表之高階段位:智慧匹配,精準打擊,要的就是這種絲滑

作者:由 EXCEL從簡單到簡單 發表于 繪畫日期:2023-01-11

COLUMN怎麼讀

人都一樣,懶了還想懶。EXCEL動態下拉列表修煉到了中級段位以後,還是不滿足,一方面是因為名稱管理器裡裝滿了名稱,顯得有些雜亂;另一方面,這種方式設定下拉列表,還要翻到引數表去看OFFSET的座標路線,尤其是向右行軍的步數,總是顯得不那麼智慧,也不夠高大上。怎麼才能讓函式充分發揮出它的智慧作用呢?

一針見血,切中要害,尋找解決問題的關鍵

我們來思考下面兩個問題:

能不能根據“工作表”中下拉列表所在列的欄位名,讓EXCEL自己去“引數表”去查向右行軍的步數呢(當然工作表列所在欄位名要與引數表中相應的欄位名必須一致)?

如何讓EXCEL自己抓取下拉列表所在列的欄位名呢?

這兩個問題如果都解決了,我們就解決了自動獲取到上期公式OFFSET的第三個引數=OFFSET(引數表!$A$1,1,

3

,COUNTA(OFFSET(引數表!$A$1,1,,20,1)),1),是不是一條公式就解決了所有下拉列表的設定了,而且名稱管理器裡只要存一個名稱“下拉列表”就可以了。

分析完問題癥結所在,剩下的就是找對人,做對事兒,接下來我們來介紹一個偵查高手出場!

眾裡尋她千百度,得來全不費功夫,特種偵察兵MATCH

【名 片】姓名MATCH,特種偵察兵。函式軍事學院特種偵察系測繪專業畢業,擅長敵後滲透,尋蹤覓跡,向後方輸送相對位置座標資料,戰績卓著,相當年與OFFSET/INDEX等配合,打了不少漂亮仗,立功無數。

【官方釋義】

MATCH(lookup_value, lookup_array, [match_type])

lookup_value必需引數,需要在 lookup_array 中查詢的值。例如,如果要在電話簿中查詢某人的電話號碼,則應該將姓名作為查詢值,但實際上需要的是電話號碼。lookup_value 引數可以為值(數字、文字或邏輯值)或對數字、文字或邏輯值的單元格引用。

lookup_array必需引數,要搜尋的單元格區域。

match_type可選引數,數字 -1、0 或 1。match_type 引數指定 Excel 如何在 lookup_array 中查詢 lookup_value 的值。此引數的預設值為 1。

【坊間釋義】

MATCH(

找誰?哪找?咋找?

),MATCH 函式可在單元格區域中搜索指定項,然後返回該項在單元格區域中的相對位置。

解決第一個問題:假如知道了下拉列表所在列的欄位名,如何得到OFFSET右行軍的步數

假如我們已經知道,設定下拉列表所在列的欄位名為“血型”,我們其實就可以派我們的特種偵察兵出場了,戰術動作分解為MATCH(找“血型”,在引數表第一行A1:Z1中找,精確匹配),即:MATCH(“血型”,引數表!$A$1:$Z$1,0)。

由於MATCH是在A1:Z1這個區域內返回“血型”的相對位置,它是從A1開始計數的,找到“血型”正好是4;而OFFSET右行軍雖然從第一列開始,但它是以跨步計數的,第3步就到了。所以由於計數方式不一樣,儘管從同一列出發, MATCH返回的相對座標數比OFFSET的行軍步數多了1,所以只有減掉1,才能二者一致,也就是說MATCH(“血型”,引數表!$A$1:$Z$1,0)-1就是OFFSET右行軍的步數。

動態下拉列表之高階段位:智慧匹配,精準打擊,要的就是這種絲滑

解決第二個問題:如何讓EXCEL自己抓取下拉列表所在列的欄位名呢?

假如我們在工作表的G列設定下拉列表,那麼G列的第一行就是欄位名;如果在H列設定下拉列表,那麼欄位名就在H列的第一行。也就是說

欄位名所在單元格行座標為1

列座標為COLUMN()

(它是動的,在哪裡設下拉列表,他就能求出那個單元格所在的列),

欄位名所在的單元格名稱為ADDRESS(1,COLUMN())

,我們再用INDIRECT函式引用一下這個單元格名稱,也就得到了單元格里的內容,即欄位名稱。

動態下拉列表之高階段位:智慧匹配,精準打擊,要的就是這種絲滑

戰果彙總:合併所有公式存入名稱,並設定下拉列表

動態下拉列表之高階段位:智慧匹配,精準打擊,要的就是這種絲滑

成果展示:要的就是這種絲滑

動態下拉列表之高階段位:智慧匹配,精準打擊,要的就是這種絲滑

如此這般,名稱管理器裡不再是滿滿名稱,針對單級下拉列表,一條就夠了,是不是夠爽。先找到解決問題的步驟,再去配置函式,最終的公式可能挺嚇人,但分解一下再來看,不過爾爾。