Obecný vzorec
=SUM(INDEX(range,N(IF(1,(1,2,3)))))
souhrn
Chcete-li, aby INDEX vrátil pole položek jiné funkci, můžete použít nejasný trik založený na funkcích IF a N. V zobrazeném příkladu je vzorec v E5:
=SUM(INDEX(data,N(IF(1,(1,2,3)))))
kde „data“ je pojmenovaný rozsah B5: B10.
Vysvětlení
Je překvapivě složité přimět INDEX, aby vrátil více než jednu hodnotu jiné funkci. Pro ilustraci lze následující vzorec použít k vrácení prvních tří položek v pojmenovaném rozsahu „data“, když jsou zadány jako vzorec pole s více buňkami.
(=INDEX(data,(1,2,3)))
Výsledky lze vidět v rozsahu D10: F10, který správně obsahuje 10, 15 a 20.
Pokud však zabalíme vzorec do funkce SUMA:
=SUM(INDEX(data,(1,2,3)))
Konečný výsledek je 10, zatímco by měl být 45, i když je zadán jako maticový vzorec. Problém je v tom, že INDEX vrací funkci SUMA pouze první položku v poli. Chcete-li vynutit, aby INDEX vrátil více položek na SUM, můžete zabalit konstantu pole do funkcí N a IF takto:
=SUM(INDEX(data,N(IF(1,(1,2,3)))))
který vrací správný výsledek 45. Podobně tento vzorec:
=SUM(INDEX(data,N(IF(1,(1,3,5)))))
správně vrátí 60, součet 10, 20 a 30.
Tato obskurní technika se někdy nazývá „dereferencování“, protože zastaví INDEX ve zpracování výsledků jako odkazů na buňky a následném zrušení všech položek kromě první v poli. Místo toho INDEX poskytuje celou řadu hodnot do SUM palců. Jeff Weir má dobré vysvětlení zde na stackoverflow.
Poznámka pro čtenáře: Nevím přesně, proč to funguje. Pokud můžete poskytnout jasné vysvětlení, aktualizuji a zahrnu.