Excel INDEX+SMALL函數用法
05-31
先說明這不是我的原創,是別人的貼子,覺得有用也就保存了下來,先發一部分吧,有用再接著發上來)
=INDEX(結果列,SMALL(IF(條件,ROW滿足條件的行號,較大的空行行號),ROW(1:1)))&""【原理】1、數組運算;2、空單元格與空文本合併。
【特點】得到的結果是文本。【實例】如圖:篩選張三的領用記錄(條件是E1單元格的「張三」)。 1.=INDEX(B:B,SMALL(IF(A$2:A$8=E$1,ROW(A$2:A$8),4^8),ROW(1:1)))&""
複製公式或代碼【解析】:對照「必殺技」,多數人已可以瞧出一點端倪來。1、條件模塊:IF(A$2:A$8=E$1,ROW(A$2:A$8),4^8)表示如果A2:A8的姓名等於E1的「張三」,則返回A2:A8的行號,否則返回4^8,即65536。IF(如果,則,否則——這語言不難讀吧
條件模塊經過數組運算,因為A2、A5、A8滿足條件,所以返回的是行號數組{2;65536;65536;5;65536;65536;8}。2、排序模塊:SMALL(IF,ROW(1:1))公式的第1行,ROW(1:1)返回{1},在第2行返回{2}……因此,利用SMALL+ROW可以將條件模塊返回的行號數組從小到大依次排序得出。當然,此例中SMALL({2;65536;65536;5;65536;65536;8},1)得到的是2,第2小的是5,第3小的是8,第4小及以後都是65536。3、引用模塊:INDEX(引用列,SMALL得到的行號)=INDEX(B:B,2)——引用B2,=INDEX(B:B,65536)——引用B65536
4、容錯模塊:&""當公式到了第4行,3個滿足條件的記錄都已經找出來,此時公式是=INDEX(B:B,65536)&「」因為Excel2003的最大行數是65536行,而在這一行中,一般不會有人輸入數據,是空單元格。因此,利用空單元格與空文本合併返回空文本的特性,將超出結果數量的部分不顯示出來。推薦閱讀:
※EXCEL一對多條件查找顯示多個結果(INDEX SMALL IF ROW函數組合)
※函數中傳入的參數是可變與不可變類型會怎樣?
※一起認識COUNTIF函數(應用篇)
※MDETERM 函數 (三角與數學函數)
※分段函數的複合函數要怎麼求(1)