Více problémů najednou...
Funkce AND a OR fungují s maticovými výrazy podobně jako MAX, MIN, SUM, ... tj. zpracují celé výsledné pole v argumentu. Tyto funkce v maticových vzorcích obvykle nelze vnořovat tj. konstrukce typu {=SUM(IF(AND(... ); ...;...} nedají očekávaný výsledek.
Pokud potřebujeme vnořit více podmínek, můžeme někdy výraz převést na jednu podmínku nebo použít klasicky místo AND a OR operace násobení a sčítání.
Převedení na jednu podmínku:
{=MAX(IF(YEAR(A1:A10)&MONTH(A1:A10)="20111";B1:B10;""))}
nebo (třeba)
{=MAX(IF(TEXT(A1:A10;"yyyym")="20111";B1:B10;""))}
Tyto vzorce mají jednu chybu: Pokud není podmínka splněna, vrací nulu, nelze tedy podle výsledku rozeznat, jestli je maximum nula nebo jestli chybí data.
Zohlednit to můžeme např. takto:
{=IF(OR(TEXT(A1:A10;"yyyym")="20111");MAX(IF(TEXT(A1:A10;"yyyym")="20111";B1:B10));"Nejsou data")}
(Hned tu máme OR v maticovém výrazu.)
Varianta s pomocnou buňku:
{=IF(OR(TEXT(A1:A10;"yyyym")=TEXT(C1;"yyyym"));MAX(IF(TEXT(A1:A10;"yyyym")=TEXT(C1;"yyyym");B1:B10));"Nejsou data")}
v C1 je datum z měsíce, pro který hledáme maximum.
Pokud přidáme ještě jednu pomocnou buňku:
{=IF(OR(TEXT(A1:A10;D1)=TEXT(C1;D1));MAX(IF(TEXT(A1:A10;D1)=TEXT(C1;D1);B1:B10));"Nejsou data")}
Můžeme pružně měnit období, za které se výraz vyhodnocuje:
D1: "yyyy" - hodnotíme celý rok
D1: "yyyyqq" - hodnotíme kvartály
D1: "yyyymm" - hodnotíme měsíce
D1: "yyyyww" - hodnotíme týdny
D1: ="[<"&VALUE("1.1.2011")&"]yyyy;yyyymm" - pro letošní rok hodnotíme po měsících, minulé roky jen jako celek....
Toto samozřejmě platí, pokud jsou ve sloupci A data a ve sloupci B čísla, kde hledáte maxima.
V původním dotazu byla zmínka o použití funkce INDIRECT. Nepochopil jsem její účel. Pokud jsou hodnoty rozděleny do bloků, pak by měl fungovat normální odkaz.
KOntingenční tabulka - dobrý nástroj, neaktualizuje se automaticky, záleží na to, co chceme s výsledky dělat dál.
Editoval lp. (14. 1. 2011 23:42:51)