Poradna - Vzorec v jedné buňce, výsledek ve druhé
hlavní kategorie | zpět | + odpovědět na toto témaVzorec v jedné buňce, výsledek ve druhé - diskuze na toto téma |
Dobrý den,
nevím si rady.
V buňce A1 mám např. text (22,0+22,0)*1,2. V buňce A2 bych potřeboval výsledek tohoto příkladu, ale tak, aby v případě editace příkladu v buňce A1 se výsledek v buňce A2 automaticky upravil. Nikde jsem v diskuzích nic nenašel. Potřebuji, abych ve výsledném dokumentu měl v jedné buňce viditelný vzorec výpočtu a v druhé buňce výsledek, který vznikne ale na základě editace příkladu první buňky. Děkuji za radu Ale v prvých 2. verziách bude problém s lokalizovanými vzorcami (napr. CZ) Odpověď Děkuji, už je to na správné cestě, nejvíce by mi vyhovovala ta metoda UDF, ale když ji zapíši do svého souboru, tak to hodí chybu #Název?. Nevím proč. Pro upřesnění posílám tabulku, kterou potřebuji takto upravit. Odpověď To pretože UDF znamená User Defined Function (užívateľsky definované funkcia = vlastná, makrom naprogramovaná funkcia). A Vy ju tam nemáte. Do súboru treba pridať Modul vo VBA (Alt+F11), do Modulu treba pridať novú funkciu, a až potom môžete funkciu použiť v liste. Samozrejme súbor treba uložiť ako súbor podporujúci makrá, teda XLSM, a nie XLSX. Našťastie pre Vaše potreby nieje potrebné použiť funkcie Excelu vo vzorcoch. To by totiž cez UDF nešlo. Máte CZ verziu, a tá má preložené názvy funkcií, ale makro pracuje s EN akvivalentami, a UDF nedokáže preložiť tieto názvy. Ale Vy keď máte iba +-*/(), tak to UDF zvládne. Vzorec by sa dal preložiť vložením ako FormulaLocal (CZ vzorec) do nejakej bunky, a prečítanie z nej cez Formula (EN vzorec), ale prečítanie rovno výsledku. To sa ale musí riešiť udalostným makrom, nie makro funkciou UDF (tá nedokáže zapisovať do iné bunky). Udalostné makro má ale zase nevýhodu, že prídete o možnosť Undo. ... Stačí takéto zjednodušené vysvetlenie ? Odpověď Ještě jednou dobrý den,
tak teď už tomu rozumím. Na tohle bych nikdy nepřišel, natolik zdatný uživatel EXCELu opravdu nejsem. Děkuji za radu. A jak přijdete na ten kód co jste tam psal?
Function VYPOCET(S As String) As Double
VYPOCET = Evaluate("=" & Replace(S, ",", "."))
End Function
To už musíte být skoro programátor, či se pletu a jsem 100 let za opicema? Odpověď Definujete si vlastnú funkciu, ktorej vstupným parametrom bude reťazec S, a výstupným bude desatinné číslo. Metóda Evaluate vykoná vzorec zapísaný ako reťazec. Prvý problém ale je, že pracuje s EN názvami funkcií. Tento problém sa Vás netýka, lebo nepotrebujete, žiadne funkcie, ale iba +-*/(). Druhý problém je, že desatiny sú v EN oddelené ".", u nás ",", a parametre sú u nás oddelené ";" a v EN ",". Teda potrebujeme zmeniť v číslach naše "," za ".", s ktorými vie pracovať. A na to je vhodná funkcia Replace. Asi tak. Odpověď |