< návrat zpět

MS Excel


Téma: Walkenbachův věčný kalendář rss

Zaslal/a 31.5.2018 0:30

Při hledání rozsáhlých maticových vzorců jsem narazil na velmi elegantní využití takového vzorce pro věčný měsíční kalendář. Nedalo mi a s malým grafickým vylepšením dávám tuto krásnou ukázku síly maticových vzorců do přílohy.

Příloha: xlsx40511_vecnykalendarjw.xlsx (12kB, staženo 261x)
Zaslat odpověď >

Strana:  « předchozí  1 2 3 4   další »
icon #040531
eLCHa
Toto téma (věčný kalendář) tady nebylo, takže proč ne. Může se to zdát přehnané, ale na základě tipů, které tady padly jste už schopní si vytvořit různé varianty věčných kalendářů - celoroční, docházkové listy apod.
Je to poměrně často využitelné řešení (kterékoliv)

Jen tip:
Pokud chce někdo studovat maticový vzorec - tak bych začal něčím typičtějším. Já to vždy ukazuji na vyhledání maxima (minima) v oblasti na základě podmínky v jiném sloupci (MAXIF, MINIF). Tam se to dá myslím krásně pochopit.citovat
#040532
avatar
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ý.citovat
#040537
avatar
Efektivitu lze posuzovat z více pohledů. Pokud jde o dobu, potřebnou k vyřešení problému, je pro mne nepoměrně rychlejší napsat proceduru ve VBA, než vymýšlet složitý maticový vzorec. Věřím, že to mají jiní obráceně, ale já píšu VBA přibližně stejnou rychlostí jako dopis (asi se umím přepnout do módu VBA).
S rychlostí výpočtu jsou asi maticové vzorce rychlejší než VBA, i když jsem se dočetl, že moc rychlé zase nejsou. Zato přinášejí komplikace, pokud mají obsluhovat měnící se počet buněk.
S pochopitelností výpočtu to zase bude odlišné podle toho, komu se lépe čte vzorec a komu VBA. Mně určitě VBA.
Skončím konstatováním, že megavzorce (a zvlášť ty maticové) jsou nášlapné miny pro dědice po odešlých řešitelích. Vím o mnoha případech, kdy "nerozluštitelný" vzorec zabránil aktualizaci chování celého sešitu.
Tyhle problémy se netýkají nikoho z těch, kdo tady v tomto vláknu diskutují. Zato mají zásadní význam pro málo pokročilé vývojáře.citovat
#040539
avatar
Lubo, dík za vzorec! Pokud máte víc takových lahůdek, pošlete mi je prosím na moji adresu. To se týká i ostatních, kteří by měli k dispozici nějaké vykutálené příklady vzorců. U těch maticových prosím o uvedení oblasti na listu, pro kterou vzorec platí. Poslouží mi k rozsáhlejším testům mého formátovacího algoritmu. Předem dík!citovat
icon #040541
avatar
Len priklad vzorca s funkciou skalarny sucin, ktory ale kvoli vnorenej funkcii když musim zadat maticovo:

=SOUČIN.SKALÁRNÍ(xlTbl_Pipeline[Annual Savings CHF]
*xlTbl_Pipeline[% within rest of current year]*((xlTbl_Pipeline[Status]="Completed")+(xlTbl_Pipeline[Status]="In realisation"))
*KDYŽ(CmbCat="(All)";1;xlTbl_Pipeline[CM]=CmbCat)
*KDYŽ(CmbRegion="(All)";1;xlTbl_Pipeline[Region]=CmbRegion)
*KDYŽ(CmbCountry="(All)";1;xlTbl_Pipeline[Country]=CmbCountry)
*(xlTbl_Pipeline[Savings Type]="NAF")
*xlTbl_Pipeline[BLweight])
/1000000

Bohuzial, editor neumoznuje odsadzovanie, ktore prave umoznuje prehladny zapis vzorca na viac riadkov, tak prikladam obrazok.
Příloha: png40541_zapisvzorca.png (9kB, staženo 58x)
40541_zapisvzorca.png
citovat
icon #040543
eLCHa
@AL
Bohuzial, editor neumoznuje odsadzovanie

2 možnosti:
- uložit do textového souboru a vložit jako přílohu
- nahradit obyčejné mezery pevnými a teprve pak vložitcitovat
icon #040544
avatar
Karle, obrazok pre ilustraciu staci, ale dik za radu.citovat
#040547
avatar

Vovka napsal/a:

Efektivitu lze posuzovat z více pohledů. Pokud jde o dobu, potřebnou k vyřešení problému, je pro mne nepoměrně rychlejší napsat proceduru ve VBA, než vymýšlet složitý maticový vzorec. Věřím, že to mají jiní obráceně, ale já píšu VBA přibližně stejnou rychlostí jako dopis (asi se umím přepnout do módu VBA)...


Jak jsem do toho nechtěl zasahovat.. Vladimíre, někdy máš dobré nápady, máš snahu pomoct, hrát si, fajn, ale kupříkladu tohle je celé pořádný filozofický blábol. Algoritmy a efektivita se neposuzuje podle něčí lenosti a rychlosti psát všemi deseti. Jestli jsi programoval, tak víš, že jde o paměťovou a časovou náročnost (složitost... lineární, polynomiální, exponenciální).

Maticové vzorce se i podle mě špatně učí, a je mnohem snazší, pokud uživatelé projdou prvákem a algebrou na vysoké škole a nebo mají gymnázium (znají zkrátka vektory, matice atd.). Nejblíž mám asi k názoru eLCHa, dobrý oslý můstek je u hranice použití funkce SUMIF a složitějších kritérií. Někdo je učí i tak, že zkrátka nahradí soustavu dílčích vzorců (vysčítání za řádky a pak suma). SOUČIN.SKALÁRNÍ se líbí hlavně proto, že je maticový, ale maticově se nezadává (a takových funkcí je víc). Pak tu můžeme strávit ale desítky hodin nad tím, jestli a jak jsou funkce optimalizované. Nedávno jsem si musel odplivnout, když jsem u nejmenovaného lektora viděl, jak uvádí ve videopříkladech odkazy na celé sloupce. Když si dovolí takovouhle prasárnu, tak bude asi super sběhlý a hlavně sebejistý v tom, jak funkce zohledňují využitou oblast listu. Na co se pak pouštět do teorie, náročnosti a optimalizace maticových vzorců a funkcí.citovat
#040567
avatar
Petře, už zase spolu diskutujeme. Pokud si odpustíme invektivy, pak mi to nevadí. Dovol, abych silně nesouhlasil s Tvým výrokem o mém filozofickém blábolu, což invektiva nesporně je.
Teď ke Tvé definici efektivity. Paměťová náročnost je přísně technický parametr, který uživatel naprosto nevnímá, pokud nenarazí na hranice svého hardwaru.
S časovou náročností jako kriteriem efektivity naopak plně souhlasím, ale ta musí být vztažena k celé době životnosti daného řešení (včetně předpokládané intenzity využití za dobu užívání). Jsou úlohy "na teď", kdy je nejefektivnější rychlé řešení, třeba na úkor doby zpracování dat. A jsou úlohy typu "furt a na roky", kdy naopak rychlost zpracování dat je dominantní i za cenu delší doby projekce. To nemusí být o lenosti řešitele, to je o posouzení, k čemu dané řešení slouží.
Posuzovat časovou efektivitu odděleně pro řešitele a pro provoz naopak pokládám za zásadní chybu úvahy.citovat
#040569
avatar
Jasně, že diskutujeme, rafeme se, teoretizujeme, jakože se perem (pořád doufám, že se taky my lidi od Excelu někdy sejdeme, ostatně my dva jsme se viděli kdy - před 11 lety?).

Maticové vzorce musí (měly by) být optimalizované, ale nejsou (SOUČIN.SKALÁRNÍ je na tom myslím lépe). Právě proto, že to není jednorázová záležitost.

Paměťová náročnost (dneska spíš obecně hardwarová) se řešit také musí, protože ačkoliv se to verze od verze zlepšuje, Excel stále není schopen naplno využívat síly procesoru, vláken, paměti, nemluvě o tom, že výpočty dnes směřují na grafické karty.

Chápu, že maticové vzorce nepatří do tvých oblíbených, stejně jako vášnivý filatelista může chtít jen vědce a ne královny :-) Ale mně se zkrátka nelíbilo tvé filozofování a postoj ve vztahu k pojmům jako je algoritmus. Jako jo dobře, možná bych měl občas lidem jejich názor zkrátka nechat (stejně jako třeba mě vytáčí Mepexg a jeho věčná PowerQuery řešení, byť ho pro daný podobor uznávám jako experta).citovat

Strana:  « předchozí  1 2 3 4   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje