數(shù)組公式可以用于動態(tài)篩選數(shù)據(jù)區(qū)域,其中的一個關(guān)鍵步驟是使用數(shù)組公式去排序一些數(shù)字。
使用數(shù)組公式排序數(shù)字
如下圖1所示,列A中的單元格區(qū)域A1:A10放置了一系列無序的數(shù)字,要求在列B中以升序排列該區(qū)域的這些數(shù)字。
可以在單元格B1中輸入公式:
=SMALL($A$1:$A$10,ROW())
向下拖至單元格B10,如下圖所示。
還有一種方法是使用數(shù)組公式。選擇單元格區(qū)域B1:B10,輸入公式:
=SMALL(A1:A10,ROW(Z1:Z10))
按下Ctrl+Shift+Enter組合鍵,結(jié)果如下圖3所示。
公式中,ROW(Z1:Z10)生成數(shù)組{1;2;3;4;5;6;7;8;9;10},作為索引值,然后依次在單元格區(qū)域A1:A10中取值。然而,如果在第1行插入新行,公式會變?yōu)椋?br />
=SMALL(A2:A11,ROW(Z2:Z11))
將導致結(jié)果錯誤。其中,第2個參數(shù)生成的數(shù)組變?yōu)閧2;3;4;5;6;7;8;9;10;11}。
為了提高公式的健壯性,使用INDIRECT函數(shù)保持第2個參數(shù)生成的索引數(shù)組在插入行時保持不變,公式為:
=SMALL(A1:A10,ROW(INDIRECT("1:10")))
結(jié)果與上面的相同,如下圖所示。
在公式中使用INDIRECT函數(shù),可使索引數(shù)組保持不變,因而可用于排序未知大小的動態(tài)區(qū)域(該區(qū)域的大小可以估計一個最大值)。
使用數(shù)組公式篩選數(shù)據(jù)
如下圖5所示,列A中單元格區(qū)域A1:A10有一系列數(shù)據(jù),要篩選出這些數(shù)據(jù)中有7個字符的數(shù)據(jù)并放置在列B中。
選擇單元格區(qū)域B1:B10,輸入數(shù)組公式:
=INDEX(A:A,SMALL(IF(LEN(A1:A10)=7,ROW(A1:A10),99),ROW(INDIRECT("1:10"))),1)&""
公式中:IF(LEN(A1:A10)=7,ROW(A1:A10),99)將得到數(shù)組{1;99;99;99;99;6;7;99;99;99},其中的99表明所有單元格中的數(shù)值長度不是7,其他數(shù)字則是長度為7的數(shù)值所在單元格的行號。
使用本文前面的技術(shù)對該數(shù)組排序:SMALL(IF(LEN(A1:A10)=7,ROW(A1:A10),99),ROW(INDIRECT("1:10"))),返回數(shù)組{1;6;7;99;99;99;99;99;99;99}。
將上面的數(shù)組傳遞給INDEX函數(shù)得到結(jié)果。
由于單元格A99為空,INDEX函數(shù)將返回0,因此在公式末尾添加&””。
對于更大的數(shù)據(jù)集,將公式中的99和”1:10”進行相應的修改,使其足夠大以匹配數(shù)據(jù)區(qū)域的大小。
小結(jié)
在前面的示例中,我們假設(shè)數(shù)據(jù)區(qū)域從第1行開始。當然,數(shù)據(jù)區(qū)域不一定非得從第1行開始,但INDEX函數(shù)的第1個參數(shù)必須是包含數(shù)據(jù)區(qū)域的整列。
如果數(shù)據(jù)區(qū)域命名為MyData,那么數(shù)組公式為:
=INDEX(dataColumn,SMALL(IF(LEN(MyData)=7,ROW(MyData),ROW(MyData)+ROWS(MyData)),ROW(INDIRECT(“1:1048576”))),1)& “”
公式中的dataColumn,引用:
=INDEX(Sheet1!$1:$1048576,0,COLUMN(MyData))
上述公式可以根據(jù)篩選條件進行相應的修改,以篩選出滿足條件的數(shù)據(jù)。