INDEX函數雖然可以生成數組,但如果不用數組公式,似乎只能返回其生成的數組中的第一個元素。然而,可以使用INDEX函數來給公式提供數組。例如:
=SUM(INDEX(A1:A10,N(IF(1,{1,4,8}))))
將計算單元格A1、A4和A8的和。
下面的公式也可以得到相同的結果:
=SUM(INDEX(A1:A10,N(INDEX({1,4,8},,))))
可以將其擴展到二維單元格區域:
=SUM(INDEX(A1:C10,N(IF(1,{1,4,8})),N(IF(1,{1,2,3}))))
計算單元格A1、B4和C8的和,即:
=SUM(A1, B4, C8)
此外,可以采取轉置其中一個數組常量的標準技術來生成更多不同的結果:
=SUM(INDEX(A1:C10,N(IF(1,{1,4,8})),N(IF(1,{1;2}))))
得到的結果與下面的公式相同:
=SUM(A1, A4, A8, B1, B4, B8)
甚至生成我們通常可能會采用OFFSET函數來生成的數組:
=SUM(INDEX(A1:C10,N(IF(1,{1,2,3})),N(IF(1,{1;2;2;3}))))
得到的結果與下面的公式相同:
=SUM(SUBTOTAL(9,OFFSET(A1,,{0,1},3,2)))
實際上等價于:
=SUM(A1:B3) + SUM(B1:C3)
當然,上述內容只是舉例,實際上可以通過很多方法來實現上述結果。最關鍵的是,通過這些例子發現了有用的技術,即可以使用INDEX函數生成多個返回值。不像OFFSET函數,其第一個參數必須是對工作表中實際單元格區域的引用,INDEX函數可以接受和處理其引用的數組,該數組由公式中其他函數生成的值組成。
并且,這種強制返回多個值的技術的使用不限于INDEX函數。例如,試圖找到A1:A10中第一次出現“A”、“B”和“C”所對應的相同行中B1:B10的最大值,如果使用公式:
=MAX(VLOOKUP({“A”,”B”,”C”},A1:B10,2,0))
不一定會得出正確的結果,原因是Excel會將該公式轉換為:
=MAX(VLOOKUP(“A”,A1:B10,2,0))
也就是說,傳遞給VLOOKUP函數的數組中的3個元素僅第1個元素被處理。
然而,使用上文所解的強制生成多個值的技術,其公式為:
=MAX(VLOOKUP(T(IF(1,{“A”,”B”,”C”})),A1:B10,2,0))
可以得到正確的結果,如下所示。