
Obecný vzorec
(=AVERAGE(LOOKUP(LARGE(IF(ISNUMBER(data),ROW(data)),(1,2,3)),ROW(data), data)))
souhrn
Chcete-li zprůměrovat poslední 3 číselné hodnoty v rozsahu, můžete použít vzorec pole založený na kombinaci funkcí k vložení posledních n číselných hodnot do funkce PRŮMĚR. V zobrazeném příkladu je vzorec v D6:
(=AVERAGE(LOOKUP(LARGE(IF(ISNUMBER(data),ROW(data)),(1,2,3)), ROW(data), data)))
kde „data“ je pojmenovaný rozsah B5: B13.
Poznámka: toto je maticový vzorec a musí být zadán pomocí kláves Control + Shift + Enter.
Vysvětlení
Funkce PRŮMĚR vypočítá průměr čísel uvedených v poli, takže téměř veškerá práce v tomto vzorci spočívá v generování pole posledních 3 číselných hodnot v rozsahu. Při práci zevnitř ven se funkce IF používá k „filtrování“ číselných hodnot:
IF(ISNUMBER(data),ROW(data))
Funkce ISNUMBER vrací TRUE pro číselné hodnoty a FALSE pro jiné hodnoty (včetně mezer) a funkce ROW vrací čísla řádků, takže výsledkem této operace jsou čísla řádků pole, která odpovídají číselným položkám:
(5;6;FALSE;8;9;10;FALSE;12;13)
Toto pole jde do funkce VELKÉ s konstantou pole (1,2,3) pro k. LARGE automaticky ignoruje FALSE hodnoty a vrátí pole s největšími 3 čísly, která odpovídají posledním 3 řádkům s číselnými hodnotami:
(13,12,10)
Toto pole přejde do funkce LOOKUP jako vyhledávací hodnota. Vyhledávací pole je poskytováno funkcí ROW a výsledné pole je pojmenovaný rozsah „data“:
LOOKUP((13,12,10), ROW(data), data))
LOOKUP pak vrátí pole obsahující odpovídající hodnoty v "data", která je vložena do AVERAGE:
=AVERAGE((100,92,90))
Zpracování méně hodnot
Pokud počet číselných hodnot klesne pod 3, vrátí tento vzorec chybu # ČÍSLO, protože LARGE nebude moci vrátit 3 hodnoty podle požadavku. Jedním ze způsobů, jak to zvládnout, je nahradit pevně konstantu pole (1,2,3) dynamickým polem vytvořeným pomocí INDIRECT takto:
ROW(INDIRECT("1:"&MIN(3,COUNT(data))))
Zde se MIN používá k nastavení horní hranice pole na 3 nebo skutečný počet číselných hodnot, podle toho, která hodnota je menší.
Poznámka: Na tento chytrý přístup jsem narazil na chandoo.org v odpovědi Sajana na podobnou otázku.