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

#1 26. 3. 2022 11:34:52

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Dobrý den,
opět se bych Vás rád požádal o pomoc s konverzí ceníku, kdy ceny jsou ve sloupcích, pomocí makra.
Měla by to být obdoba "Jak zkonvertovat ceník s cenami v řádcích do sloupců?" s tím, že makro bych chtěl používat univerzálně.

Zadání:
- 1. řádek je vždy záhlaví
- záhlaví může být různě dlouhé (v tomto případě např. 14 buněk)
- rozhodující pro konverzi je sloupec A = Materiál
- počet řádků s jedním materiálem může být různý
- počet defaultních sloupců se stanoví pomocí dotazu (okna) nebo napevno (v tomto případě "4" = sloupce A-D)
-

A               B        C    D     ...  K       L        M
mater_1   ks       1    US    ...  10    16,00  12,5
mater_1   ks       1    US    ...  30                11,75
mater_1   ks       1    US    ...  100   14,0     11
mater_1   ks       1    US    ...  1000  8,00   
mater_2   ks       1    CZ    ...  1       6,00
mater_2   ks       1    CZ    ...  10    4,0        1,5
mater_2   ks       1    CZ    ...  50    2,00

Makro by mělo fungovat takto:
1) do nového listu "Radky" zkopíruje záhlaví tabulky (např. 14 buněk zleva), včetně formátu
2) dotaz na počet defaultních sloupců (=ty se zkopírují na řádek pouze jednou), nyní např. A-D
3) stanoví se "blok" dat, který se bude vždy kopírovat, záhlaví 14 - 4 (default) = 10 buněk, např. E-M
4) zkopíruje obsah buněk E2:M2; E3:M3; E4:M4; E5:M5 na stejný řádek (výsledkem bude na řádku s materiálem 
mater_1 44 zkopírovaných buněk.
5) opakuje se bod 4) pro další jinou hodnotu ve sloupci A (mater_2, ...)

Předpokládám, že by to mohlo jít.
Děkuji.

Editoval Eddie60 (3. 4. 2022 15:16:13)

Offline

#2 26. 3. 2022 15:12:39

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Popis není moc dobrý, i když se dá pochopit objem potřeb. Tady asi musíte poslat ukázku zdroje dat. Představa jako se to má rozebírat je důležitější nežli skutečnost jak se to má uspořádat do výstupu. Předpokládám, že je to nějaké CSV, ale může to být i něco jiného. Volba pomocí dialogu potřebuje také vstupní bod - a ten když je, tak stačí údaj kolik řádků stejného materiálu se nakopíruje. Jen nesprávné zadání souhrnného požadavku způsobí, že dodák (faktura ap.) neobsahuje rozlišení a vynutí explicitní zadání dialogem.


Pokud by byly dodáky (nabídky, poptávky, faktury...) skutečně velice odlišné například podle dodavatele, je nutná předpříprava na unifikovaný zdroj. Doklady stejného dodavatele mají stejnou strukturu, takže stačí makro pro individuální předpřípravu.


Tak jak to popisujete povede jen k dalšímu upřesňování. Pokud jde o choulostivá data, udělejte simulovaný doklad aby se nedalo určit kdo, co, nebo kdy a za kolik.


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 26. 3. 2022 17:20:43

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Dobře, pak tedy zadání zjednoduším, bude pouze 5 sloupců. Zbytek dat si doplním dle potřeby pomocí funkce VLOOKUP.
Bohužel, počet řádků se stejným materiálem je různý v rozsahu 1-12.
Celkový počet řádků může být do 50 tisíc.
Struktura je tato:
Materiál    Počet    Jedn.    Cena    Měna
materiál_0    5000    ks    0,038    EUR
materiál_1    1    ks    0,936    EUR
materiál_1    50    ks    0,795    EUR
materiál_1    100    ks    0,777    EUR
materiál_1    500    ks    0,53    EUR
materiál_2    50    m    1,246    EUR
materiál_2    100    m    1,094    EUR
materiál_3    1    l    0,877    EUR
materiál_3    50    l    0,77    EUR
materiál_3    100    l    0,662    EUR
materiál_3    250    l    0,615    EUR
materiál_3    500    l    0,574    EUR
materiál_3    1000    l    0,538    EUR

Potřeboval bych převést data do nového listu tak, aby na jednom řádku u stejného materiálu byly všechny údaje (Počet, Jedn., Cena a Měna).
Předpokládal jsem, že řešení makrem by mělo být nejrychlejší.
Nebo to lze řešit jinak a jednodušeji?
Děkuji.

Offline

#4 26. 3. 2022 18:22:49

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Nejde o zjednodušení počtem sloupců, ale zejména o to jak zjistíme počet řádků stejného materiálu.


Myslím, že se vše vyjasní když do Calcu načtete nabídku LIST > ODKAZ NA EXTERNÍ DATA (vyžaduje správně nastavit importní filtr), nebo dokonce jenom LIST > VLOŽIT LIST ZE SOUBORU. Mohou to být i data ve formátu JSON ve formě textového sloupce a dvojtečkou jako separátorem na řádku, nebo PDF, XML a jiné formáty.


Pokud Vám přichází různé formy od různých dodavatelů je možné udělat šablony, které se mohou volat i automaticky za určitého předpokladu (unikátního příznaku). Ty se makrem upraví a automaticky vloží do centrální evidence. Nejspíš by stačilo jen otevřít soubor dokladu z umístění v počítači, nebo na síti a 1x kliknout.


Stavět makra, nebo vzorce naslepo je zbytečně komplikované a myslím, že podobné, nebo stejné téma dotazujete opakovaně. Při tom nejspíš stačí ukázat z čeho se má těžit a jak má vypadat výstup.
Postnout sem simulovanou ukázku není nic světoborného – určitě lepší nežli vypisovat růčo do příspěvku, kde nelze ani dobře přiřadit poznámky tak jako k buňkám v Calcu a navíc se to rozjíždí, a přehlednost je děsná.


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 27. 3. 2022 10:06:23

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Tady je odkaz na požadovaný soubor, kde je v jednom listu je vstup a v dalším listu požadovaný výstup:
https://drive.google.com/file/d/1HYHNEY … sp=sharing
Nejde o opakovaný dotaz. Řešil jsem konverzi ceníku v řádcích do sloupců.
Nyní bych to potřeboval naopak.

Offline

#6 27. 3. 2022 18:09:05

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Tady je první pomalý pokus : Ceník_úprava1

Když budu mít zítra chvíli udělám vše jen vzorci a možná i makro zrychlím. Tohle pomalá verze. Potřeboval bych to otestovat aby se to případně doladilo.


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 27. 3. 2022 20:35:35

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Pokud makro spustím přes Nástroje - Makro - Spustit a zvolím makro a dám spustit, objeví se chyba:
"Při běhu Basic skriptu Standard.Module1.hlavicka došlo k chybě skriptovacího rozhraní.
Zpráva: wrong number of parameters!"

Pokud makro spustím přes Nástroje - Makro - Upravit makra - kliknu na tlačítko Spustit, vyberu makro a spustím ho, makro proběhne v pořádku a výstup odpovídá zadání.

Offline

#8 28. 3. 2022 04:22:25

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Eddie60 napsal(a)

Pokud makro spustím přes Nástroje - Makro - Spustit a zvolím makro a dám spustit, objeví se chyba:
"Při běhu Basic skriptu Standard.Module1.hlavicka došlo k chybě skriptovacího rozhraní.
Zpráva: wrong number of parameters!"   .............


     Pokud to chodí z aktivace Basicem, je to v pořádku. Já jsem tam udělal spouštění pomocí hlavní nabídky OVLÁDÁNÍ CENÍK. Z této volby by to mělo chodit také. Chybová hláška se někdy ukazuje ve spojitosti s neexistencí, nebo nesprávně přiřazenou knihovnou JAVA, bez které to ale lze také spustit, stačí hlášku potvrdit.
     Chyba souvisí s verzí LO. Některé verze to vyžadují, jiné nikoliv. Ale je možné, že to dělá LO pod Linuxem, nebo pod W10, nebo W11. Já to stavím na W7. Udělejte screen obrazovky s chybovou hláškou a pošlete mi to sem, nebo na email uvedený pod tímto článkem.


PS
     Možná jde o to, že jste makro zkopíroval do jiného sešitu ve kterém to nechodí. Je to proto, že makro píše na 3. list v pořadí, který tam asi nemáte. Udělejte 3. list (je jedno jak se jmenuje) a spusťte znovu. Také můžete přepsat makro hledejte v kódu (2) a nahraďte za (1). Bude to tam vícekrát.

Editoval neutr (28. 3. 2022 04:45:11)


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

#9 28. 3. 2022 05:43:03

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Máte pravdu. Spuštění makra pomocí hlavní nabídky OVLÁDÁNÍ CENÍK funguje bez problémů. Mám taky Win7.

Offline

#10 29. 3. 2022 18:17:07

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Tady je řešení pomocí vzorců : Ceník_úprava2


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

#11 30. 3. 2022 18:36:24

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Děkuji za řešení pomocí vzorců, které je pro max. 150 řádků.

Testoval jsem makro (Ceník_úprava1). Pokud je v souboru cca 15 tisíc řádků (počet různých 3085, max opakování 6), konverze trvá cca 2min 15s.
Celý soubor má přes 38 tisíc řádků a při spuštění makra se objeví chyba "Nepřípustná hodnota či datový typ.
Přetečení." Otevře se okno s makrem a zvýrazní se řádek "Lrow = PosRow - 1" -viz chyba_1.jpg.
https://drive.google.com/file/d/1Ar1HcQ … sp=sharing
Myslel jsem, že je chyba ve vstupních datech, tak jsem soubor rozdělil na 2 části a při cca 15 tis. řádků makro funguje.
Po vymazání prvních 15 tis. řádků (zůstalo 23 tis. řádků) se objevuje chyba: "BASIC - chyba při běhu.
Vyskytla se výjimka
Type: com.sun.star.lang.IndexOutOfBoundsException
Message: ."
Pokud jsem 23 tis. řádků opět rozdělil na 2 části, makro proběhlo v pořádku.

Offline

#12 31. 3. 2022 06:02:04

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Tady je upravené makro : Ceník_úprava3
Opravil jsem makro. Jednak jsem přepsal tak, aby se ukládalo do listu číslo 2, a dále jsem změnil deklaraci proměnných z "integer" na "long" (tím se odstraní přetečení).


Otestujte a dejte vědět zda je to v pořádku. Dále uvádíte, že makro běželo cca 2 minuty při cca 25% řádků. To znamená, že celý (nezkrácený) soubor by měl měl běžet cca 6 až 8 minut. To je hodně, ale jde spíš o to, jak často se takové operace dělají. Pokud je to jednorázový účel - nemá to cenu zrychlovat. Pokud se to dělá denně, nebo alespoň "často" v uvedeném rozsahu desítek tisíc, tak by to bylo zralé na zrychlení. Dejte vědět.


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

#13 31. 3. 2022 17:41:20

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Otestoval Ceník_úprava3. Chyba přetečení se neobjevuje, ale objevuje se opět chyba:
"BASIC - chyba při běhu.
Vyskytla se výjimka
Type: com.sun.star.lang.IndexOutOfBoundsException
Message: ." - viz
https://drive.google.com/file/d/1A-vP1Q … sp=sharing
Pokud nechám v souboru cca 1000 řádků, konverze proběhne. U 1500 řádků již nikoli.


Zrychlení makra není nutné. I kdybych to dělal 1x denně, ušetří mi to spoustu času.

Offline

#14 31. 3. 2022 19:31:11

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Napadá mne ještě možnost, že je chybná deklarace předávané proměnné. To jsem přehlédl, ale u mne to chodí i s tímto. Jde o tento řádek :

Sub hlavicka(ByVal opak as long) 'původně integer 

který přepište tak jak je uvedeno - tedy původní integer přepište na long.
     Proměnná je ve zdrojovém makru deklarována jako long. Předává se voláním a je to ten "opak" as integer, což je pře deklarování (moje chyba). Přesto když to chodí u mne, tak funguje také pro hodnoty do velikosti "integer" - tedy cca do 32000 (- proto Vám to původní makro vypadlo při počtu 38 tisíc). Ale hlavička je jen v řádku, který má maximálně 1024 buněk (sloupců) a přetéct by to nemělo ani náhodou.
     Jedinou možností je, že počet opakování jedné proměnné je 256 řádků (nebo více). Potom by přetekl list.
Otestujte to takto :

Sub hlavicka(ByVal opak as long) 
print opak 

Jednoduše print opak napište hned do prvního řádku. Spusťte makro a vyskočí Vám hlášení, které musí být číslem menším, nežli 1023 - jinak je to právě příčina přetečení indexu sloupce.


Ale pokud to není tato chyba (když to chodí u mne u Vás by mělo také), tak nevidím na Vašem obrázku něco co ukazuje, že je chybně index (.IndexOutOfBoundsException) => index mimo rozsah nelze akceptovat. Jde tedy nejspíš o číslo listu, které by mělo být (1), ale to nevidím přes hlášku která to překrývá.


Pokud jste opravoval makro v živém sešitě, udělal jste možná chybu. V takovém případě bych doporučil nakopírovat všechna makra (celý obsah modulule1) do knihovny v živém sešitě. Pokud jste něco doplňoval, použijte kopii v novém modulu a ten potom porovnejte řádek po řádku.


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

#15 1. 4. 2022 16:58:40

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Změnil jsem hlavičku dle doporučení na:
"Sub hlavicka(ByVal opak as long)
print opak"

Vyskočilo hlášení s číslem 377 a následně stejná chyba (chyba_2a.jpg)
https://drive.google.com/file/d/1d3rKPu … sp=sharing


Vzhledem k tomu, že do originálního souboru "Cenik_sloupce_úprava3.ods" jsem jsem nakopíroval do listu "vstup" pouze nová data od ř. 2, opravil hlavičku makra dle doporučení, výsledek byl tento:
20 tis. řádků - chyba 2a;
15 tis. řádků - makro proběhne;
jsem začal hledat jinde a napadlo mě zkontrolovat verzi SW.
Měl jsem LibreOffice v. 7.3.0.3 (progresivní) a tak jsem ji nahradil v. 7.2.6.2 (stabilní)
Makro u 20 tis. řádků nyní proběhne, ale u 38 tis. řádků se objeví stejná chyba.
Nechápu.

Offline

#16 1. 4. 2022 18:04:27

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Eddie60 napsal(a)

....... Vyskočilo hlášení s číslem 377 a následně stejná chyba (chyba_2a.jpg)
https://drive.google.com/file/d/1d3rKPu … sp=sharing....

     Odkaz vyžaduje přístup. Zatím jsem nic neobdržel, ale to co píšete je jasné. Těch 377 řádků ze sloupce A reprezentuje 377 x 4 = 1508 sloupců. To nemohlo projít, protože list má pouze 1024 sloupců.
     Máte problém, který je nutné řešit jinak. Možností je více, ale veskrze jsou praktickým řešením pouze 2 - 3 verze.
A. Za řádkem 255 (ve sloupci A) pokračovat na dalším listu.


B. přidat k hlavičce zkratku jednotek Materiál + k(jako kusy), E(jako Eura) a podobně. zbudou 2 sloupce (to  už stačí k pokrytí většího množství - cca 511 řádků ze sloupce A).


C. Výstup transponovat – místo do řádku dělat výpis do sloupců.


D. Pokračovat druhým řádkem a spojit (sloužit) dvě buňky pod sebou do jedné, aby sloupec šlo procházet plynule.


E. Sloučit hodnotu s jednotkou. Lze to vytvořit formátem, ale čte se jen číslo bez přídavku.


     Každé řešení má svá pro a proti. Pokračování na novém listu je méně komfortní, ale jde jen o to s těmito údaji budete dělat. 1024 / 4 = 256 přesně, ale v prvním sloupci je materiál. Takže do řádku se vejde opravdu jen 255 x 4 = 1020 + 1 (materiál) a proto na konci zbudou 3 prázdné sloupce kde může být klikací odkaz do dalšího listu, nebo počet záznamů – potřebný zejména v načatém řádku.


     Pokud bychom transponovali do sloupců, potkáme se asi také se stejným problémem. Předpokládám, že by 38 tisíc řádků ve sloupci A by musel každý obsahovat 40 záznamů, aby se to vešlo do listu a zřejmě to může postupně růst. Takže zbývají úvahy o zkrácení hlaviček na polovinu (zkrátit ze 4 na 3 ani tak nestačí bylo by to 1131 sloupců).


Prakticky zbývá jen zkrácení hlaviček na dvě položky. To by stačilo až na 511 stejných záznamů, nebo pokračovat na dalším řádku (což je vlastně duplicita, které se chcete vyhnout). Navíc by se značně zpomalilo makro dík formátům, ale něco bych určitě odladil. Bohu žel se změnami verzí nemusí formátovaná čísla fungovat stejně dobře, což se projeví třeba za pár let (doufejme, že nikdy).


Takže je na Vás jakou zvolíte koncepci.

Editoval neutr (1. 4. 2022 18:13:28)


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

#17 1. 4. 2022 19:43:30

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Práva jsem opravil
https://drive.google.com/file/d/1d3rKPu … sp=sharing


Na základě Vaší odpovědi mě napadlo toto řešení:
Sloupce Jednotka a Měna jsou pro 1 položku vždy stejné, mohli by se zkopírovat pouze jednou za sloupec "Materiál".  Pak by smyčka (opakování) byla pouze na Množství a Cenu.
Bude to takto fungovat?

Pokud ne, rozdělím soubor na 2 části a pak data spojím.
Jedná se o největší počet řádků (do 40 tisíc).
Zpravidla pro tento typ převodu mám menší počet řádků.
Snažím se najít řešení, které bude fungovat delší dobu.
Formát dat není rozhodující, pokud to zrychlí makro. Formát dat se dá velice rychle dodělat.

Offline

#18 2. 4. 2022 06:58:29

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Ano souhlasím. Jednotky a cena v buňce za materiálem je technicky nejlepší řešení. Musíte si ale uvědomit, že to má také svá proti. Zejména jde o přehlednost a možnost vytvořit chybu, byť dnes to možná vypadá bezproblémově. Musíte si uvědomit, že i přetečení sloupců jsme nepředpokládali a přes to se to stalo. Uvedu co by se mohlo stát a jak je možné se tomu bránit :


Riziko je sice minimální, ale přes to se může stát toto : Počet jednotek je číslo většinou rozeznatelné ve formě podílu – čísla s desetinnou čárkou, ale počty kusů jsou celé číslo ap. S cenou je to podobné. Když ponecháme jen čísla snadno zaměníme dva sousední údaje z různých případů. Tedy například spojíme (cena_5)+(jednotka_6).
     Tomu se dá zabránit nejlépe barevným odlišením sloupců jednotek (například jemnou barvou) přímo v zápisu na řádku. List totiž zajíždí pod zafixované řádky i sloupce. Proto barva sloupce z hlavičky nebude souhlasit s posunutým listem.
     Už vidím jak spustíte hledání podle množství, nebo ceny a jak list zajede „doleva a nahoru". Budete mít svou hodnotu, ale nebudete vědět jestli je to počet, nebo cena. Vyřeší to buď podbarvení, nebo formát buňky který by řešil i jinou chybu.


     Dalším problémem je skutečnost, že se u stejného materiálu zřejmě může vyskytovat také různá měna. Jak je vidět – používáte Eura, ale u nás platí Kč a může jít možná i o jinou měnu USD apod. V případě stejného materiálu a různého druhu měny by vznikly dva (nebo i více) řádků stejného materiálu. Jediným nejvhodnějším řešením je formát buňky s připojenou jednotkou a druhem měny.


     Například |2,65 m2|17,5 E|, nebo |5,2 kg|123,07 Kč| v takovém případě je možné záznam vytvořit buď formátováním (což vyžádá více kódu), nebo lépe ve formátu string (text), ale potom musíme hledat opravdu text. Opět jde o to k čemu potřebujeme hledání. Formát string ušetří kód makra. Oba způsoby mají výhodu a nevýhodu a jde zejména o strojní prohledávání.


     Problém hledání zřejmě není možné provádět jinak, nežli makrem vzhledem k počtu buněk. Makro pro hledání nebylo požadováno, ale manuální hledání je velice hektické i když je uspořádání tabulky sofistikované.


A. Hledá se přesný typ materiálu (sloupec A). Dál je možné v řádku hledat buď podle jednotek, nebo podle velikosti, a nebo obojí. Zkratku (jednotka & druh měny) je možné přidat samostatně do sloupce B, nebo ji přilepit přímo k materiálu ve sloupci A. Když budou formátované jednotlivé buňky není takové opatření potřeba, ale přes to bych do sloupce B doporučil vložit počet položek.


B. Strojní hledání nepotřebuje odlišit sloupec jednotky ani ceny. Takové hledání by se provádělo například za účelem dohledání materiálu u kterého známe pouze počet jednotek, nebo cenový objem. Bylo by to dohledávání chyb z dřívějšího zpracování.


     Makro vyhledávání je pro všechny různé případy nutné postavit jinak. Proto je koncepce tabulky stěžejní. Také je důležité upřesnit jak má vypadat výstup z makra. Může to být například extra list s výpisem, nebo skok na položku a její podbarvení v 1. listu (zdroj). Samozřejmě jde o to proč se takové úpravy vůbec dělají.
     Takže zvažte potřebu makra už při návrhu koncepce výstupní tabulky. Makra pro uspořádání tabulky je celkem snadné upravit do nové podoby a bylo by to asi tak na hodinu práce. Makro by také nemělo trvat dlouho.


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

#19 2. 4. 2022 19:31:04

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Nejdříve na vysvětlenou. Jednotka a měna má pro nás informativní charakter. Pro jeden materiál jsou vždy stejné pro daný ceník.
Na základě Vaší odpovědi jsem upravil vstupní tabulku a pokusil se také upravit i makro (viz Cenik_sloupce_zadání_2.ods).
https://drive.google.com/file/d/1-U7xLS … sp=sharing
Snažím se pochopit, jak makro funguje a taky jsem nechtěl, aby jste ztrácel další čas.


Makro v tomto případě funguje bez problémů, počet opakování materiálu je max 12 a v "List2" je počet párů sloupců "Počet" a "Cena" taky 12.


1) Problém nastává u celého objemu dat u cca 80 tis. řádků (počet různých 8965, max opakování 6), kdy v hlavičce je 377 párů sloupců. 377 je hodnota "opak".
Počet opakování jednoho materiálu může být max. 12.
Pozitivní je, že konverze ceníku do řádků nyní proběhne celá v rozmezí 3-3,5 min, což je super.

2) V listu "vystup_Cíl" jsem přesunul sloupce "Jedn." a "Měna", aby se kopírovali pouze 1x.
Nevím, jak upravit makro.

Offline

#20 3. 4. 2022 08:46:26

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO


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

#21 3. 4. 2022 09:52:48

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Makro funguje rychle (cca 3,5 min) a dobře až na hlavičku, kde je 377x "Počet_x" a "Cena_x" (u cca 80 tis. řádků). Dá se to jednoduše ošetřit?
Pokud ne, tak to tak necháme. Hlavička se dá rychle upravit.
Děkuji.

Offline

#22 3. 4. 2022 10:18:16

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Eddie60 napsal(a)

Makro funguje rychle (cca 3,5 min) a dobře až na hlavičku, kde je 377x "Počet_x" a "Cena_x" (u cca 80 tis. řádků). Dá se to jednoduše ošetřit?
Pokud ne, tak to tak necháme. Hlavička se dá rychle upravit.
Děkuji.

     Nevím přesně oč Vám jde. Jde o rychlost s jakou se vybavuje hlavička, nebo spíš o šířku sloupce. Ne šířku sloupce lze jednoduše kliknout do porůsečíku řádků a sloupců, nebo stejně efektivně Ctrl+A - najet na hlavičky sloupců a pravým tlačítkem zavolat kontextové menu > OPTIMÁLNÍ ŠÍŘKA. je to za dvě sekundy. Samozřejmě makro na to existuje také. Nemám s tím problém.
     Pokud by se jednalo o rychlost výbavy hlavičky chtěl jsem celkově systém makra přebudovat do array, kde by to bylo formou "metelesku blesku" vše včetně hlavičky. Tipuji v řádech malých sekund.


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

#23 3. 4. 2022 12:39:23

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Do souboru jsem doplnil hlavičku (červeně), která vznikne po ukončení makra na plných datech.
https://drive.google.com/file/d/1DMJwL7 … sp=sharing
To jsem měl na mysli.

Offline

#24 3. 4. 2022 13:40:58

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

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Nějak tomu nerozumím. Podle mne je to správně. V tom souboru máte nějaký materiál, který má 377 x opakovaný výskyt. To znamená 377 x 2 sloupce. Bude to tam asi jen jednoukrát a proto se Vám asi zdá, že je hlaviček zbytečně moc?
     Udělejte Ctrl+End - skožíte do poslední buňky souboru. Potom stiskněte Ctrl+šipka nahoru. Měl byste se dostat na ten poslední zápis s největším opakováním. Ale nyní opravdu nevím oč Vám jde.
     Vy možná chcete místo 377 hlaviček jenom 12? To by dávalo smysl, ale potom nemáte informaci kolikrát se opakuje materiál s největší redundancí. Můžete sice dopočítat podle poslední buňky ale když byste se dostal do problému s přetečením sloupců (máte maximálně 511 hlaviček), tak nebudete vůbec vědět proč se to stalo.
     Hlavička potom nepotřebuje proměnnou opak a stačilo by tam číslo 12. Omlouvám se a prosím o další upřesnění. Nebo se objevuje duplicitně druhá řada hlaviček?

Editoval neutr (3. 4. 2022 13:43:55)


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

#25 3. 4. 2022 13:55:19

Eddie60
Člen
Registrace: 5. 2. 2022
Příspěvků: 38

Re: Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO

Ano, chtěl bych, aby v hlavičce bylo číslo max. 12.
První červený řádek s hlavičkou jsem doplnil ručně, aby byl vidět výsledek makra. 
Jinak makro funguje perfektně.
Děkuji.

Offline

Zápatí