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

#1 7. 5. 2014 14:40:22

cervicek
Člen
Registrace: 18. 4. 2013
Příspěvků: 7

opakovanie cisla x krat "VYŘEŠENÝ"

Dobry den,

Prosim Vas mam 2 stlpce dat a chcem vytvorit treti stlpec v ktorom sa budu nachadzat prvky prveho stlpca tolko krat kolko je udane v druhom stlpci. Viete mi poradit? dakujem

priklad:
a  3 
b  5
c  4
...
vysledok ma byt:

a
a
a
b
b
b
b
b
c
c
c
c

Editoval cervicek (26. 6. 2014 11:20:46)

Offline

#2 7. 5. 2014 15:33:11

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

Re: opakovanie cisla x krat "VYŘEŠENÝ"

Jde to, ale je to složitější konstrukce.
- Nejprve zjistíme největší počet opakování - to je maximum ze sloupce "B".
- Vložíme na začátek prázdný řádek - důvod vysvětlím později.
- Dejme tomu, že maximum je 5. Potom je potřeba postavit vzorce od C2, D2, E2, F2, G2.:
pro C2 : "=IF(B2 > 0;MAX(C1:G1)+1;"")
pro D2 : "=IF(B2 > 1;C2+1;"")
pro E2 : "=IF(B2 > 2;D2+1;"")
pro F2 : "=IF(B2 > 3;E2+1;"")
pro G2 : "=IF(B2 > 4;F2+1;"")
- Nyní těchto 5 vzorců vykopírujeme na konec úseku.
- Hned načteme vše do paměti a vložíme zpět jen hodnoty (čísla a text).
    Nyní vystříhneme hodnoty ze sloupců D až G a vložíme je pod sloupec C. Nejlépe tedy nejprve vystříhnout "G" a vložit pod "C", následně "F" a zase vložit na konec sloupce "C" a tak dál.
    Když jsou všechna čísla ve sloupci "C" dáme Ctrl+END, Ctrl + Home a máme celý úsek vybraný - A1:Cx. Celý úsek přetřídíme podle sloupce "C". Vznikne nám systém, který potřebujete. Snadno si ověříte, že součet slouce "B" a poslední řádek ("C") jsou shodné.
    Nyní můžete (ale nemusíte) sloupec "B" odstranit. Ve sloupci "A" budete mít výraz, který budete kopírovat a pod ním počet mezer Ze sloupce "B". Důležitý je už jen údaj posledního řádku (původní sloupec "C"), který vylastně vyjadřuje počet opakování poslední hodnoty.
    Kvůli vzorcům jsme museli začít od řádku číslo 2, protože na řádku číslo 1 se nedá volat řádek předcházející.


    Takže nyní do sloupce "C" (nebo prvního prázdného) vložíte vzorec :
"=IF(A2=0;C1;A2)". Tento vzorec vykopírujete na konec úseku, zase vložíte do paměti a dáte zpět jen jako čísla a text. Ten prázdný 1 řádek už můžeme odstranit.
    Máte hotovo a můžete všechny sloupce před tímto smazat. Vypadá to možná krkolomně, ale když si otestujete vzorce, dá se to pochopit. Trik je v té první operaci - nalezení maxima a vytvoření počtu vzorců podle "B".

Editoval neutr (7. 5. 2014 15:40:29)


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 13. 5. 2014 14:10:11

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

Re: opakovanie cisla x krat "VYŘEŠENÝ"

snad mohu přispět se svou troškou do mlýna. Jde to dvěma pomocnými sloupci + třetí jako výsledný.
sloupce A a B jsou zadání a začínají od A1 B1
řádek jedna bude malinko jiný a bude tam
ve sloupci C bude =A1
ve sloupci D bude =1
ve sloupci E bude =B1

na druhém řádku a pak roztaženě ve všech dalších:
C: =IF(E1>1;C1;INDEX($A$1:$A$35;D1+1;1))
D: =MATCH(C2;$A$1:$A$35;0)
E: =IF(E1>1;E1-1;INDEX($B$1:$B$35;D1+1;1))

Příklad je nastaven na 35 hodnot v zadání ale je to jedno, může jich být libovolně, stejně tak počet opakování jedné hodnoty. Když dojdou vzorce na konec tak se začnou objevovat chyby. To se dá ošetřit, ale taky nemusí, prostě se tam roztažení vzorců ukončí, záleží na tom jak moc má být soubor interaktivní - jak se budou měnit hodnoty a jak se bude výsledek vyhodnocovat.

Budu rád když dáte vědět jak jste pochodil, ještě jsem tady nikomu nic neradil, zato jsem tu už mnoho dostal.

Jo a není tu ošetřena nula opakování, to by se asi též dalo vymyslet, záleží na tom zda je to potřeba, nyní se zobrazuje minimálně jedenkrát i při zadání nuly.


... a takto by to bylo s ošetřením nuly
C: =IF(E1>1;C1;IF(AND(E1=1;INDEX($B$1:$B$35;D1+1;1)=0);INDEX($A$1:$A$35;D1+2;1);INDEX($A$1:$A$35;D1+1;1)))
D: =MATCH(C2;$A$1:$A$35;0)
E: =IF(E1>1;E1-1;IF(AND(E1=1;INDEX($B$1:$B$35;D1+1;1)=0);INDEX($B$1:$B$35;D1+2;1);INDEX($B$1:$B$35;D1+1;1)))

Editoval ludviktrnka (13. 5. 2014 16:25:39)


LibreOffice 5.4.

Offline

Zápatí