Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 12. 10. 2021 09:01:01

hal_sk
Člen
Registrace: 24. 5. 2020
Příspěvků: 8

Proměnná v Calc vzorci - VYŘEŠENO

Ahoj,
Je možné používať premenné vo vzorcoch? Jedná sa mi o to, aby som sa vyhol duplikovaniu niektorých častí kódu v rovnakom vzorci. S týmto problémom sa stretám hlavne keď používam VLOOKUP, ktorý mi ťahá rovnakú hodnotu z iných zošitov na viacerých miestach vo vzorci. Bolo by vhodné si tú hodnotu deklarovať na začiatku vzorca pod nejakým názvom a následne by som v tom vzorci len odkazoval na tú hodnotu použitím názvu premenej.

Editoval hal_sk (12. 10. 2021 20:38:45)

Offline

#2 12. 10. 2021 09:22:44

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Proměnná v Calc vzorci - VYŘEŠENO

Nevím jestli jsem správně pochopil dotaz. Ty proměnné lze nastavit tak jak si asi představujete. Jde jen o to, kde ty proměnné jsou. Zda v sešitě který tahá data, nebo v sešitě, kde jsou zdroje dat.


     Většina proměnných se dá nastavit odkazem na buňku. Takže v sešitě který data tahá z jiných je nutné vybavit buňky s obsahem proměnné. Potom na ně odkazujeme. Ale to asi není to co potřebujete.


     Jde Vám asi o úseky v jiných sešitech. To se dá řešit různě. Například pojmenovanými úseky v sešitech zdrojů. V různých sešitech mohou být stejné pojmenované úseky, ačkoliv jejich rozsahy nemusí být v různých sešitech stejné.
     Jinou cestou je udělat si na úseky hyperlinky v sešitě odkud taháte data. Ale i zde je výhodou pojmenovaný úsek. Takže jde to, ale dotaz je celkem široký. Chtělo by to ukázku. Stačí maličkost, a doporučení nebude fungovat.
     Udělejte typický vzor sešitu zdroje a sešitu těžby tam zadejte simulovaná data. Pokud tam nejsou nějaké hesla v přístupech a podobně, neměl by to být problém vzorcem a ani makrem


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 12. 10. 2021 11:03:55

hal_sk
Člen
Registrace: 24. 5. 2020
Příspěvků: 8

Re: Proměnná v Calc vzorci - VYŘEŠENO

Žial, nenapadá ma zjednodušená verzia môjho problému. Ale tu je reálny problém. Toto je môj vzorec:
=IF(ISBLANK(C2);"";IF(ISBLANK(VLOOKUP(C2;$'zoznam markerov'.A2:$'zoznam markerov'.D199;4;TRUE()));"";CONCAT(ROUND(D2*VLOOKUP(C2;$'zoznam markerov'.A2:$'zoznam markerov'.D199;4;TRUE());2);" ";VLOOKUP(C2;$'zoznam markerov'.A2:$'zoznam markerov'.C199;3;TRUE()))))
V tom vzorci sa 2x vyskytyje toto:
VLOOKUP(C2;$'zoznam markerov'.A2:$'zoznam markerov'.D199;4;TRUE())
Táto časť vzorca vracia hodnotu z buňky na základe vzťahov medzi tabuľkami. Rád by som tú časť vzorca deklaroval len raz (napr. na začiatku vzorca) a potom na to len odkazoval vo vzorci. Ten vzorec by bol následne kratší a prehliadanejší. Tiež by ma zaujímalo, či je v Calc možnosť písať vzorec do špeciálneho editora, v ktorom by som mohol daný vzorec zalamovať na nové riadky kvôly sprehladneniu syntaxe (ako normálny programovací jazyk).
Čiže by som mohol celkový vzorec napísať nejak takto:


deklaracia premennych...
VAL1 = VLOOKUP(C2;$'zoznam markerov'.A2:$'zoznam markerov'.D199;4;TRUE())
VAL2 = VLOOKUP(C2;$'zoznam markerov'.A2:$'zoznam markerov'.C199;3;TRUE())

pouzitie premennych vo vzorci...
=IF(ISBLANK(C2);"";IF(ISBLANK(VAL1);"";CONCAT(ROUND(D2*VAL1;2);" ";VAL2)))

Výrazne by to sprehladnilo vzorec.

Offline

#4 12. 10. 2021 14:22:57

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Proměnná v Calc vzorci - VYŘEŠENO

Myslím, že by to mělo být takto : Riešenie


     Ještě maličkost původní dotaz byl na jiné sešity (tedy sešity Calcu), ale jak je vidět, jde pouze o listy stejného sešitu. Také jste mohl postnout vzor - já musím vymýšlet simulaci za Vás. To není košer.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 12. 10. 2021 17:34:36

hal_sk
Člen
Registrace: 24. 5. 2020
Příspěvků: 8

Re: Proměnná v Calc vzorci - VYŘEŠENO

Ďakujem za ochotu a sorry za chýbajúci funkčný príklad z mojej strany. Strávil som pred prázdnym zošitom 15 minút a žiadna jednoduchá analógia k môjmu problému ma nenapadla. A to ja som fanúšik ad-absurdum analógií.
To Vaše riešenie funguje perfektne, ale mám otázku: kde je tam deklarované že VAL1 = $G$2 a VAL2 = $H$2. Lebo buď som slepý, alebo to nikde nemôžem nájsť. Je to deklarované v nejakej bunke, v rámci vzorca, alebo niekde úplne inde v nastaveniach?
A ďakujem aj za objasnenie rozdielu medzi zošitom a listom v rámci Calc.

Offline

#6 12. 10. 2021 19:04:16

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Proměnná v Calc vzorci - VYŘEŠENO

Ty pojmenované úseky se dají nastavit volbou : LIST > POJMENOVANÉ VÝRAZY A OBLASTI > Definovat.


     Jakmile stojíte v určitém úseku, nebo buňce navolíte tento úsek a zadáte mu jméno. Jakmile je jméno zadáno, objeví se v okénku "pole názvu" - je to roletka těsně nad tabulkou v levé straně. Pojmenovaný úsek už absolutní adresu nepotřebuje. Ten vzorec může být vybaven názvem dodatečně. Pojmenovaný úsek je vidět ve všech listech, kde se volá úplně stejně.
     Místo pojmenované oblasti můžete v cílové oblasti zapsat absolutní adresu a ta se potom nemění ukázka :

=IF(ISBLANK(C2);"";IF(ISBLANK($G$2);"";CONCAT(ROUND(D2*$G$2;2);" ";$H$2)))

     Jenomže v jiných listech musíte zapsat list před takto označenou buňku. Takže když pracujete ve více listech, je pojmenovaný úsek veliká výhoda.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#7 12. 10. 2021 20:38:11

hal_sk
Člen
Registrace: 24. 5. 2020
Příspěvků: 8

Re: Proměnná v Calc vzorci - VYŘEŠENO

Tak to mi neskutočne pomohlo. Škoda, že som o tom nevedel skôr.

Toto:
=IF(ISBLANK(C2);"";IF(ISBLANK(VLOOKUP(C2;$'zoznam markerov'.$A$2:$'zoznam markerov'.$D$199;4;FALSE()));"";CONCAT(ROUND(D3*VLOOKUP(C2;$'zoznam markerov'.$A$2:$'zoznam markerov'.$D$199;4;FALSE());2);" ";VLOOKUP(C2;$'zoznam markerov'.$A$2:$'zoznam markerov'.$C$199;3;FALSE()))))

Som bol schopný zredukovať na toto:
=IF(ISBLANK(C2);"";IF(ISBLANK(koef);"";CONCAT(ROUND(D2*koef;2);" ";unitUS)))

Výsledok: https://bit.ly/2YEOS3C

Ďakujem za trpezlivosť :-)

Offline

Zápatí