Uvedený kaledář je opravdu pěkná ukázka maticového vzore, i když fakticky jen kopíruje řešení běžnými vzorečky.
Ovšem tvrzení, že "normální" vzorce a vba stačí na 100% je sice pravdivé, ale v řadě případů hodně neefektivní.
Například regresní analýza (pomíjím zmatek ve výběru funkcí). Funkce LINREGRESE je maticová a vrací matici výsledků. To neobejdete skalárním součinem a psát to ve vba je možné, ale málo efektivní. Mimochodem, maticový vzorec obalený skalárním součinem je stále maticovým vzorcem, jen je menší riziko, že ho někdo špatně uloží.
Další uplatnění jsou různé kontroly zadaných čísel (ean, čísla karet, čísla účtů, sipo, ...). Lze to samozřemě řešit ve VBA, pro mne je pro rychlou kontrolu často rychlejším řešením maticový vzorec (třeba obalený skalárním součinem).
Příklad pro formátování:
=A(MOD(SUMA(--ČÁST(ZPRAVA("000000"&ZLEVA(A1;IFERROR(NAJÍT("-";A1)-1;0));6);ŘÁDEK(NEPŘÍMÝ.ODKAZ("1:6"));1)*{10;5;8;4;2;1});11)=0;MOD(SUMA(--ČÁST(ZPRAVA("0000000000"&ČÁST(A1;IFERROR(NAJÍT("-";A1)+1;1);20);10);ŘÁDEK(NEPŘÍMÝ.ODKAZ("1:10"));1)*{6;3;7;9;10;5;8;4;2;1});11)=0)
Vzorec otestuje číslo účtu bez lomítka a kódu banky. Samozřejmě je maticový.
Vovka napsal/a:
pro Luba: vzorec není z internetu, ale z tištěné knihy od Walkenbacha (resp. z přiloženého CD). Když to bylo tak jednoduché, proč jste ten vzorec neopravil?
To není výzva. Vzorec je poměrně přímočarý a jednoduchý.
Funkčnost vzorců na internetu, které se týkají práce s kalendářem je vždy dobré ověřit. Zejména, když implicitní hodnoty u nás dávají chyby.
Pokud jde o jeden měsíc tak lze
=SUMIFS(A:A;B:B;"CZ";C:C;">=1.měsíc.rok";C:C;"<=Poslední.měsíc.rok")
Například v D1 je měsíc, v E1 je rok:
=SUMIFS(A:A;B:B;"CZ";C:C;">="& DATUM(E1;D1;1);C:C;"<="& EOMONTH(DATUM(E1;D1;1);0))
Teprve teď jsem si všiml, že AL napsal totéž.
Pokud potřebuješ více měsíců, můžeš vzorec "namnožit" pro jednotlivé měsíce a sečíst nebo totéž udělat maticovým vzorcem:
{=SUMA(SUMIFS(A:A;B:B;"CZ";C:C;">="& DATUM(E1:E3;D1:D3;1);C:C;"<="& EOMONTH(DATUM(E1:E3;D1:D3;1);0)))}
(Bez složených závorek ale při ukládání použij ctrl-shift-enter)
V příkladu jsou v D1:D3 měsíce a v E1:E3 odpovídající roky.
Posílám ukázku
To nebyl dotaz.
Prostě pokud někdo si chce udělat rychlý přehled za minulý týden, tak data jsou posunuta o den.
Funkce zřejmě není moc používána. Prostě jsem v kot. tabulce zkusil rychle vybrat minulý týden. Pak jsem chvíli hledal chybu. Tohle mne hned nenapadlo.
Nástroj je to dobrý, ale chyb ja v něm na můj vkus docela dost. Tahle je další.
Možná slovenská verze je OK?
Zdravím.
Všimnul jsem si chování filtru kal. dat v kontigenční tabulce.
Pokud filtrujeme minulý, tento nebo příští týden, tak podle mikrosoftu týden začíná v neděli, končí v sobotu.
Verze min 2010 až 2016.
Taky je tu index:
=INDEX($A$1:$HVT$12;ŘÁDEK($1:$12);TRANSPOZICE(ŘÁDEK($1:$1000))*6-5)
(Maticově)
ad věk. Pokud to zůstane, jak je psáno, tj. je tam jen jeden uzavřený interval,
tak bych použil kontingenční tabulku.
Do řádků věk, seskupit, začátek = 18, konec = 26, krok 8.
a je to.
Viz data - citlivostní analýza, tabulka dat, případně správce scénářů.
Zkuste také zadat B1: =SUMA($A$2:A1), C1: =SUMA(A1:$A$2) a C1 také zkopírujte dolů.
A Excel tyto vzorce vyhodnocuje jako různé.
Jinak řečeno - kotva jednoho rozhu uprostřed bloku dělá neplechu.
Narazil jsem na to, když jsem hledal rozdílné vzorce (přejít na - jinak - rozdíly (ve sloupcích|řádcích)
Ještě soubor
Add okruhy:
Je třeba omezit počet proměnných. Místo vyplňování úhlopříčky lze nastavit nějaké řešení (nemusí být optimální) vybrat do pole proměnných jen zadané okruhy a hledat, jestli se nenajde menší počet balíků.
Když máte nalezený potřebný počet balíků seskupte nalezené řešení tak, aby použité okruhy byly v sousedních sloupcích (bez balíků s nulovou délkou mezi nimi). V buňce spočtěte max odpad.
Zadejte jako proměnné jen vybrané okruhy, cílová funkce je v buňce se spočteným max. odpadem a hledáme maximum.
Tato varianta neptimalizuje ostatní balíky. Pokud je v ostatních balících velký počet poměrně dlouhých kousků, lze vyčlenit balík s nejdelším zbytkem a proceduru zopakovat pro ostatní balíky.
Na příkladu jsem zkusil míslo prostého max hledat maximum sumy čtverců, což by mělo preferovat větší rozdíly mezi zbytky (velké by měly být co největší, malé naopak), ale dávalo to trochu horší výsledky.
OK
Opomněl jsem jedno omezení:
$I$2:$I$9>=0
A u cílové funkce hledáme nejmenší počet úseků. Je nutné zaškrtnout min.
Evoluční algoritmus nehledá absolutní optimum, ale generuje varianty a testuje, jestli se cílová funkce mění potřebným smerem. Pokud se dlouho nic nemění, tak se algortimus zastaví. Obvykle je výsledek dost dobrý. Pokud ne, lze ho spustit znovu, případně před opakovaným spuštěním ještě vhodně změnit některou z proměnných.
řešitel:
Do A2:A9 dejte délky úseků
Do B1:I1 čísla 1-9 (označení balíků)
Nejprve nastavíme počáteční stav : z každého balíku vezmeme jeden úsek. - diagonálu oblasti B2:H8 vyplníme číslem 1.
Poslední balík dopočteme:
Do I2 : =1-SUMA(B2:H2)
a zkopírujeme ho do i3:i9
Dále sečteme použité délky v balíku. Do B10 : =SOUČIN.SKALÁRNÍ($A$2:$A$9;B2:B9)
a zkopírujeme do C10:i10.
Do j10 vložíme cílovou funkci: =COUNTIF(B10:I10;">0")
řešitel:
cílová funkce: j10
proměnné : $B$2:$H$9
metoda : evoluční algoritmus
zaškrtnout podmínku nezápornosti
podmínky:
Proměnné jsou <=1 a celá
$B$2:$H$9<=1
$B$2:$H$9 = celé
V posledním balíku jsou úseky nejvýše po jedné:
$I$2:$I$9<=1
Délky jsou <= 200:
$B$10:$I$10<=200
Spusťte řešení
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.