多對多查詢:多個查詢條件,多個查詢結果。
例如要從下圖所示表格中查詢年齡40以上男性的姓名清單,查詢條件有兩個:年齡大于40,性别“男”;滿足條件的結果也會有多個,即多對多。
多對多查詢案例
在高于2021版本的Excel中,解決多對多查詢易如反掌,可以用篩選函數FILTER.
=FILTER(array,include,if_empty)
array:要篩選的資料集合,通常是一個數組範圍或一個區域。
include:篩選條件,可以是一個數組範圍或一個區域,也可以是一個邏輯表達式。
if_empty:當沒有符合條件的資料時的傳回結果,可以是一個數組範圍或一個區域,也可以是一個值。
具體到案例,查詢滿足兩個條件的姓名:
=FILTER(B3:B10,(C3:C10>40)*(D3:D10="男"))
如果還有更多條件,添加到第二參數即可。
FILTER多對多查詢
而如果要傳回姓名年齡等全部資訊,隻需放寬第一參數的範圍:
=FILTER(B3:D10,(C3:C10>40)*(D3:D10="男"))
FILTER多對多查詢
在沒有FILTER的版本中要解決這個問題就比較棘手。
INDEX+SMALL+ROW的搭配是經典的解決方案:
=IFERROR(INDEX(B:B,SMALL(IF(($C$3:$C$10>30)*($D$3:$D$10="男"),ROW($B$3:$B$10),""),ROW(1:1)),),"")
INDEX+SMALL+ROW一對多查詢
IF傳回滿足條件姓名的行号;
SMALL(IF(),ROW())從小到大分别提取行号;
INDEX(SMALL(IF(),ROW()))按行号傳回對應的姓名;
IFERROR用于避免錯誤值。
無論從哪個方面對比兩個方法,FILTER都是YYDS.