< návrat zpět

MS Excel


Téma: Formátování vzorců rss

Zaslal/a 26.5.2018 21:29

Nedávno jsem tady otevřel vlákno Luštění megavzorců. V jeho diskuzi mne zaujal příspěvek, který zaslal Al s tím, že on v případě potřeby formátuje vzorec do řádků s odsazením. Ten postup jsem znal, ale zejména u cizích vzorců mi tato jejich manuální úprava, nápomocná pochopení vzorce, připadá nadměrně pracná.
Odsud už byl jen krůček položit si otázku, jestli takovou úpravu vzorce nelze provést pomocí makra. Odpověděl jsem si na ni sešitem, který je v příloze. Tento sešit se otevře a do popředí se umístí sešit se zkoumanými vzorci.
Označí se buňka se vzorcem a zkratkou Alt+h se zavolá jeho rozbor. Vzorec lze v této formě upravovat a výsledek po úpravách vrátit do zdrojové buňky. Na výběr je, jestli se vzorec vrátí v jednořádkovém provedení, nebo naformátovaný do řádků s odsazením.
Sešit posílám jako černou skříňku se zamčeným kódem. Potřebuji pomoci s testováním nástroje na vašich vzorcích. Pokud kdokoliv z vás zdokumentuje vadnou odezvu nástroje nebo přijde s nápadem, jak funkci nástroje zlepšit, rád mu pošlu hesla k listu i projektu VBA jako odměnu. Předem děkuji za spolupráci!

Příloha: zip40479_analyzavzorce.zip (40kB, staženo 41x)
stop Uzamčeno - nelze přidávat nové příspěvky.

Strana:  1 2   další »
icon #040489
eLCHa
@Vovka
Čtete pouze, pokud vás zajímá zpětná vazba ;)

1) Chtělo by to ještě doladit - ne všechny fce začínají na novém řádku. Vyplivlo mi to něco takového=KDYŽ(NEBO(Chyba_Zadani;
           $A$59="";
           D$37>Nastavení!$A$5);
      "";
      IFERROR(ZÍSKATKONTDATA("Hodnota";
                             'ObchodnípřirážkavKč'!$B$93;
                             "Úroveň 2";
                             ""&$B62;
                             "Úroveň 3";
                             ""&$C62;
                             "Měsíc";
                             ""&D$37;
                             "Období 2";
                             ""&$A$59);
           ""))


2) Asi by chtělo vysvětlit význam těch tlačítek - ty hlášky, že to chce zapisovat do origánalu mně celkem vystrašily ;)

3) Pokud už bych někdy něco takového měl používat, tak by se mi líbil vyšší level: rozbor do buněk podle úrovní - vracelo by výsledky jednotlivých funkcí.citovat
#040491
avatar
Mám zájem o každou odezvu v tomto vlákně. Proto děkuji. Ačkoliv uvedený příklad není moc úhledný, výsledek splňuje záměr, který bych očekával. Funkce NEBO má tři argumenty a sama je prvním argumentem funkce KDYŽ (jeho podmínka). Druhým argumentem funkce KDYŽ je "" (větev ANO) a třetím je IFERROR (větev NE). Prvním argumentem této funkce je ZÍSKATKONTDATA s 10 argumenty. Erorová větev pro IFERROR je "".

Nedoladěnost ve smyslu toho, že každá funkce nezačíná na vlastním řádku, byl můj záměr, který měl zabránit zbytečnému narůstání počtu řádků naformátovaného vzorce. Pokud to působí jako nedoladěnost, není problém výstup přizpůsobit.

Co se týká správného odsazování řádků, to je závislé na použití neproporcionálního písma (např. Courier New), které RefEdit v sešitě používá a ve kterém by měl být výsledek naformátování prezentován. Pro pochopení vnitřní struktury vzorce je zvolená forma jeho prezentování podle mého mínění dost názorná.

Tlačítka dělají to, co je na nich napsané. Opravdu je možné vzorec v rámci RefEditu upravit a opravdu je možné takto upravený vzorec vrátit do zdrojové buňky (včetně zachování jeho formátu). Vzorec samozřejmě napřed projde logickou kontrolou na formální správnost. To jsem skutečně pečlivě testoval a nenarazil jsem na chybu.

Služba, o které elCHa píše na závěr (vracení výsledků jednotlivých funkcí), je po mém soudu uspokojivě řešená v rámci standardní služby Vzorce / Vyhodnocení vzorce.

Za hlavní nedostatek svého nástroje pokládám to, že se zatím nevypořádá s maticovými vzorci. Na tom teď pracuji a až to dám dohromady, rozšířený nástroj opět zveřejním. Snad elCHa počká na tu rozšířenou verzi, k níž mu zašlu i slíbená hesla jako svůj dík.citovat
#040499
avatar
Když jsem z nástroje odstranil vracení formátovaného vzorce do zdroje, odstranil jsem s tím současně své problémy s maticovými vzorci. Teď by nástroj měl zvládat i tyto vzorce. Nástroj je v příloze.
Kromě několika stylistických změn jsem odstranil tabelační vadu, které jsem si všiml v příkladu od elCHa. Hlavní viditelnou změnou nástroje (vedle úbytku dvou tlačítek) je přidání "tabulátorů" do sformátovaného vzorce, jejichž cílem je zvýraznit hierarchické vztahy mezi součástmi vzorce.
Snad si v této podobě můj nástroj najde své příznivce mezi těmi, kteří jsou nuceni luštit cizí super/giga/mega vzorce.
Příloha: zip40499_analyzavzorce2.zip (40kB, staženo 37x)
citovat
#040707
avatar
Zdravím, autora.
Ušetřilo mi práci s odladěním.

Jen asi by chtělo doladit drobnosti.
V jednom vzorci mi vrátilo:

=100*H7+ZLEVA(I7;
¸ NAJÍT(":";
¸ ¸ I7)-2)-(ZPRAVA(I7;
¸ ¸ DÉLKA(I7)-NAJÍT(":";
¸ ¸ ¸ I7)
¸ ¸ -1))+ZLEVA(I7;
¸ NAJÍT(":";
¸ ¸ I7)
¸ -2)/100+1/SVYHLEDAT(C7;
¸ List3!$B$29:$I$53;
¸ 8)/10000+1/SVYHLEDAT(C7;
¸ List3!$C$3:$D$26;
¸ 2)
/1000000

Např. První výskyt ZPRAVA() bych očekával pod prvním výskyt ZLEVA()citovat
#040708
avatar
V mezidobí jsem provedl významné úpravy nástroje, které jeho funkce zpřesnily a rozšířily. Teď piluji ta rozšíření právě proto, aby pak už nebylo nutné volat po doladění. Dělám na tom po chvilkách, když zrovna není nic spěchavějšího. Až budu sám spokojený, dám to do placu. I v současném stavu jsem tu hračku už párkrát použil, abych se vyznal ve změti svých vlastních uvozovek a středníků. Takže mám osobní zájem, aby to běhalo spolehlivě a maximálně názorně.
V úvodní verzi jsem řádkoval výhradně při výskytu středníku. Výskyt dlouhých aritmetických výrazů ve vzorcích mne přiměl, abych takové výrazy také rozkládal do řádků. Pak mi ale vznikalo tolik řádků, že rozklad přestával být přehledný "na výšku". Zvolené kompromisy někdy dopadají přehledně, jindy je to horší. Ve vašem příkladu by odřádkování před +ZPRAVA přehlednosti vzorce opravdu prospělo.
Dík za příklad. Třebas mne inspiruje k vylepšení výstupu.citovat
#040733
avatar
@JoKe
Změnil jsem kritérium pro rozdělování řádků, končících středníkem. Místo aritmetického operátoru za funkcí jsem použil aritmetický operátor před jménem funkce. Váš vzorec se v tom případě rozložil následovně (viz příloha). Při přímém zobrazení kódu se totiž deformuje vstupní odsazení řádků.
Vypadá to daleko přirozeněji (i když i na této podobě lze najít mouchy).Možná ještě něco poladím a pak bych to nejspíš dal k obecnému použití. Dík za inspiraci!
Příloha: png40733_rozklad.png (7kB, staženo 61x)
40733_rozklad.png
citovat
#040742
avatar
@Vovka
Pro mne je to takto přehlednější.
Když už jsme u těch mušek - asi by mělo být na jednom řádku
+1/SVYHLEDAT(...citovat
#040743
avatar
Jsou věci, které vypadají složitě, ale udělat jdou. A také věci, které vypadají jednoduše, ale vymykají se z rámce logiky úlohy. K nim patří právě ono +1/SVYHLEDAT. Respektovat pořadí významnosti aritmetických operátorů ve výrazu (a řádek dělit podle toho) by znamenalo neskutečnou komplikaci celého posuzovaného analyzátoru.
K mému rozpisu vzorců je vhodné přistupovat trochu s nadhledem, asi jako k záznamníku maker. Udělá černou práci, ale někdy potřebuje ruční doladění. Ovládací prvek RefEdit, který je pro zobrazení vzorce použit, má běžné editovací schopnosti jednoduchého textového editoru. Pokud chci pro publikační účely rozpis vzorce upravit, lze to udělat velmi jednoduše. Dokonce lze změnit i logický obsah vzorce a pak zkontrolovat, jestli jeho obsah bude počítačem dál pokládán za vzorec. Cílem je, aby bylo možné vzorec po úpravách vrátit zpět na zdrojové místo, které bylo pro zobrazení vzorce použito.
V příloze jsou obrázky několika megavzorců, automaticky rozepsaných nejnovější verzí posuzovaného analyzátoru. Při prakticky nekonečné variabilitě zápisu vzorců jde podle mne o poměrně zdařilé rozpisy. Neumím ovšem vyloučit, že někdo dokáže napsat vzorec tak, že jeho rozklad nedopadne dobře. Zatím ale nevím o žádné případné díře do mých necek 10 .
Příloha: zip40743_rozpisy.zip (91kB, staženo 35x)
citovat
#040860
avatar
Super. Prošel jsem si některé starší megavzorce a kromě dříve uvedeného, funguje skvěle.
(Námět - uložit zpět do buňky naformátované?)citovat
#040862
avatar
Vzhledem k nepochopitelným zásahům do mých příspěvků ze strany administrátora nemíním dále na tomto fóru publikovat. Zkuste přímou komunikaci na můj mail.citovat

Strana:  1 2   další »

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

spojení vzorců v PQ

lubo • 19.3. 10:47

Podmínka pro spuštění makra

elninoslov • 19.3. 9:19

duplicity

elninoslov • 19.3. 9:13

Podmínka pro spuštění makra

MilanKop • 18.3. 18:51

Podmínka pro spuštění makra

Stalker • 18.3. 18:34

duplicity

fortes • 18.3. 17:48

Podmínka pro spuštění makra

MilanKop • 18.3. 17:31