close

利用Excel的【數據有效性】功能製作下拉菜單,應是表哥表姐耳熟能詳的一個技能了。

當然,有些小夥伴可能還不會,不會的小夥伴估計是E界新人,是輕稚可愛的表弟表妹,是早晨八九點鐘的太陽,是祖國——咳咳,作為過來人,星光還是誠摯建議您翻閱下EH公眾號的往期文章,認真學習下【數據有效性】的相關知識——畢竟這部分知識是非常炫酷實用的。

咱們這期講的內容是也和數據有效性有關,是利用CELL函數,製作具有模糊查詢效果的動態下拉菜單。

這話到底啥意思呢,還是用動態圖說話吧。

目標

在A列某區域輸入某個關鍵詞,在數據有效性的下拉列表里,顯示出包含該關鍵詞的數據。


材料

一份名單表:

製作過程

E2單元格輸入數組公式,並向下填充到E10單元格區域:

(左右拖動查看完整公式)

=INDEX(D:D,SMALL(IF(ISNUMBER(FIND(CELL("contents"),D$2:D$10)),ROW($2:$10),4^8),ROW(A1)))&""

這公式看起來很複雜的模樣,但倘若您學習並掌握了我們之前推送的INDEX+SMALL+IF函數套路的文章,理解起來就簡單多了。

CELL("contents")

CELL函數省略了第二參數,獲得最後更改單元格的值。

FIND(CELL("contents"),D$2:D$10)

FIND函數查詢CELL函數的結果,是否在D2:D10單元格區域存在,如存在則返回一個位置數值,相反則返回錯誤值,生成一個內存數組,比如:

{#VALUE!;4;4;2;#VALUE!;#VALUE!;……;#VALUE!}。

再來看下面這部分:

IF(ISNUMBER(FIND(CELL("contents"),D$2:D$10)),ROW($2:$10),4^8)

ISNUMBER函數判斷FIND函數的結果是否為數值,如為數值,則IF函數判斷為真,返回相關值所對應的行號,如否,則返回值4^8,即65536。

接下來再看一下完整公式:

=INDEX(D:D,SMALL(IF(ISNUMBER(FIND(CELL("contents"),D$2:D$10)),ROW($2:$10),4^8),ROW(A1)))&""

SMALL函數對IF函數的結果進行從小到大取數,隨着公式的向下填充,依次提取第1、2、3、4……N個最小值,由此依次得到符合條件——包含最後更改單元格值的單元格的行號。

INDEX函數根據SMALL函數返回的索引值,得出結果。

當SMALL函數所得到的結果為4^8,即65536時,意味着符合條件的行號已經被取之殆盡了。此時INDEX函數將返回D65536單元格的值,通常來說,這麼大行號的單元格是空白單元格,此時使用&「」的方式,規避空白單元格返回零值的問題,使之返回假空。

由於CELL("contents")得到的是最後更改單元格的值,而編輯上述公式時的單元格即為最後更改內容的單元格,此時會造成循環引用,但不必理會。

公式填充至E10單元格後結果如下:

選取設置下拉菜單的單元格區域A2:A9,點擊【數據】選項卡中的【數據驗證】(13版本之前名為【數據有效性】)。

在彈出的數據驗證對話框中,單擊【設計】選項卡【允許】輸入框右側的按鈕,在下拉列表中選擇【序列】。

單擊【來源】右側的選取按鈕選擇工作表的數據區:$E$2:$E$10

單擊【出錯警告】選項卡,去掉【輸入無效數據時顯示出錯警告(S)】的勾選。

最後【確定】之,大功告成了。

結束語

撓頭……那個……對於大部分表弟表妹來說,今天分享的內容難度係數確實有些偏高,想必有不少人云里霧裡的,難點之處在於那條長長的裹腳布函數。

關於INDEX+SMALL+IF的函數套路,坊間裡戲稱萬金油套路,由此可見它作用之強大——作為早晨八九點鐘的太陽,E界未來的希望,怎能不掌握它呢?

——新的一天,兄弟姐妹們努力學習吧!

圖文作者:看見星光


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()