有下面的數(shù)據(jù): 需要查找所有蘋果的記錄: 一般情況下,Excel中查找是通過VLOOKUP進(jìn)行的, =VLOOKUP(M3,tblData[[產(chǎn)品]:[計(jì)劃]],{1,2,3,4},0) 但是,VLOOKUP函數(shù)只能返回第一條記錄: 而我們需要返回全部(4條)記錄: 我們可以使用兩種方法解決,詳情請看下面的視頻:
如果你使用Excel 2019及之前的版本,那么可以使用下面的公式: ={INDEX(tblData,SMALL(IF(tblData[產(chǎn)品]=M3,ROW(tblData[產(chǎn)品])-2,10000),{1;2;3;4}),{1,2,3,4,5,6,7})} 這是一個(gè)數(shù)組公式,如果你的Excel不支持動(dòng)態(tài)數(shù)組(即傳統(tǒng)Excel版本),就需要使用CTRL+SHIFT+ENTER完成公式的輸入;如果支持動(dòng)態(tài)數(shù)組,直接輸入即可以得到結(jié)果。 下面簡單解釋一下, 我們將上面的公式用代號(hào)改寫一下: =INDEX(源數(shù)據(jù),滿足條件的記錄行號(hào),返回的列號(hào)) 這個(gè)公式是使用INDEX函數(shù)完成的,起作用的方式就是從源數(shù)據(jù)區(qū)域中返回指定行號(hào)和列號(hào)的單元格。 公式中返回的列號(hào)使用的是數(shù)組: {1,2,3,4,5,6,7} 表示返回“源數(shù)據(jù)區(qū)域”中的從第1列到第7列的數(shù)據(jù),這樣就可以返回滿足條件的整行數(shù)據(jù)了。 而“滿足條件的記錄行號(hào)”,是用下面的公式得到的: SMALL(IF(tblData[產(chǎn)品]=M3,ROW(tblData[產(chǎn)品])-2,10000),{1;2;3;4}) 其中的IF部分是個(gè)數(shù)組: IF(tblData[產(chǎn)品]=M3,ROW(tblData[產(chǎn)品])-2,10000) 作用是將源數(shù)據(jù)中的產(chǎn)品列與條件進(jìn)行比較,所有滿足條件的記錄返回對應(yīng)的行號(hào),而不滿足條件的記錄則返回10000(一個(gè)比較大的數(shù)值即可)。 可以看出,其中第一個(gè)匹配的結(jié)果就是上述公式返回2的對應(yīng)行,這可以通過下面的公式得到: SMALL(IF(tblData[產(chǎn)品]=M3,ROW(tblData[產(chǎn)品])-2,10000),1) 即通過SMALL函數(shù)返回匹配行號(hào)數(shù)組中第一小的值。 有了這個(gè)行號(hào),就可以使用下面的公式返回第一個(gè)匹配的行 了: =INDEX(tblData,SMALL(IF(tblData[產(chǎn)品]=M3,ROW(tblData[產(chǎn)品])-2,10000),1),{1,2,3,4,5,6,7}) 而原公式中的SMALL部分,使用數(shù)組{1;2;3;4},同時(shí)返回前四個(gè)最小值: SMALL(IF(tblData[產(chǎn)品]=M3,ROW(tblData[產(chǎn)品])-2,10000),{1;2;3;4}) 這樣就可以同時(shí)返回這四行記錄了。 上述方案理解起來比較困難,使用時(shí)也比較麻煩:需要事先知道有多少滿足條件的記錄,然后選定結(jié)果需要占用的單元格區(qū)域,然后用CTRL+SHIFT+ENTER鍵進(jìn)行輸入。 所以只能是一個(gè)在傳統(tǒng)Excel版本中的折中方案。 如果使用的是Excel 2021或者Office 365,就可以使用FILTER函數(shù), =FILTER(tblData,COUNTIFS(M3:M3,tblData[產(chǎn)品])) 直接對源數(shù)據(jù)進(jìn)行篩選,條件是產(chǎn)品列是否在條件區(qū)域出現(xiàn)過。 很簡單的一個(gè)公式就可以解決問題,而且可以篩選滿足多個(gè)條件的全部記錄。 |
|