學Excel函式公式,怎能不會這個組合套路?

2021-09-12 18:15:24 字數 1170 閱讀 4160

我們對資料進行查詢時,經常會使用vlookup函式。但有時我們提取符合條件的結果是多個,而不是乙個,這時候vlookup就犯難了。

舉個例子

如下圖,左側a1:c10是乙份學員名單表,現在需要根據f1單元格的「eh圖班」這個指定的條件,在f2:f10單元格區域中,提取該班級全部學員名單。

index+small+if

f2單元格輸入以下陣列公式,按住ctrl+shift鍵不放,再按回車鍵,然後向下填充:

=iferror(index(b:b,small(if(a$1:a$10=f$1,row($1:$10)),row(a1))),"")

公式講解

if(a$1:a$10=f$1,row($1:$10))

這部分,先判斷a1:a10的值是否等於f1,如果相等,則返回a列班級相對應的行號,否則返回false,結果得到乙個記憶體陣列:

再來看這部分:

small(if(a$1:a$10=f$1,row($1:$10)),row(a1))

small函式對if函式的結果進行取數,隨著公式的向下填充,依次提取第1、2、3……n個最小值,由此依次得到符合班級條件的行號。

隨後使用index函式,以small函式返回的行號作為索引值,在b列中提取出對應的姓名結果。

當small函式所得到的結果為錯誤值#num時,意味著符合條件的行號已經被取之殆盡了,此時index函式也隨之返回乙個錯誤值,為了避免公式返回乙個錯誤值,最後使用iferror函式進行規避,使之返回乙個空文字""。

其它說明

很多時候,一些朋友喜歡把index+small+if的套路寫成:

=index(b:b,small(if(a$1:a$10=f$1,row($1:$10),4^8),row(a1)))&""

或=index(b:b,small((a$1:a$10<>f$1)/1%+row($1:$10),row(a1)))&""

這兩個套路,通過引值真空單元格搭配&」」的方法,很巧妙的規避了錯誤值的出現,而且公式的長度得到了精簡,是iferror函式未出現前處理錯誤值的常用技巧。

只是當公式的查詢結果為數值或者日期時,這個方法會把數值變成文字值,並不利於資料的準確呈現以及再次統計分析。

比如乙個簡單的sum求和,對於此類文字資料的統計都是麻煩的,原因是大部分統計函式都忽略文字值,不予計算。

所以通常還是建議大家使用iferror函式來處理錯誤值。

學Excel函式公式,怎能不會這個組合套路?

我們對資料進行查詢時,經常會使用vlookup函式。但有時我們提取符合條件的結果是多個,而不是乙個,這時候vlookup就犯難了。舉個例子 如下圖,左側a1 c10是乙份學員名單表,現在需要根據f1單元格的 eh圖班 這個指定的條件,在f2 f10單元格區域中,提取該班級全部學員名單。index s...

學Excel函式公式,怎能不會這個組合套路?

我們對資料進行查詢時,經常會使用vlookup函式。但有時我們提取符合條件的結果是多個,而不是乙個,這時候vlookup就犯難了。舉個例子 如下圖,左側a1 c10是乙份學員名單表,現在需要根據f1單元格的 eh圖班 這個指定的條件,在f2 f10單元格區域中,提取該班級全部學員名單。index s...

學習Python,怎能不懂點PEP呢?

或許你是乙個初入門python的小白,完全不知道pep是什麼。又或許你是個學會了python的熟手,見過幾個pep,卻不知道這玩意背後是什麼。那正好,本文將系統性地介紹一下pep,與大家一起加深對pep的了解。目前,國內各類教程不可勝數,雖然或多或少會提及pep,但籠統者多 侷限於某個pep者多,能...