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

#1 4. 3. 2011 14:43:30

mausr
Člen
Registrace: 2. 3. 2011
Příspěvků: 5

Vyhledání a výpis hodnot

Prosím o radu s funkcí:

V sloupci A1 mám hodnoty: 1 2 3 (A1:A3). Ve sloupci B1 mám textové údaje např. Jan Karel Dasa (B1:B3). Do buňky C1 chci zadat hodnoty oddělené čárkou např.1,3. Do buňky D1 chci aby se mi vypsali hodnoty: Jan,Dasa. Když to shrnu, tak potřebuji po zadání libovolných hodnot ve sloupci A1 oddělené čárkou do jedné buňky, vypsat hodnoty ve vedlejším sloupci taktéž oddělené čárkou do jedné buňky.

A B
1 Jan
2 Karel
3 Dasa

buňka C1: 1,2
buňka D1: Jan,Karel

nebo

C1: 1,2,3
D1: Jan,Karel,Dasa
atd.

Offline

#2 4. 3. 2011 18:42:10

hanus
Člen
Místo Olomouc
Registrace: 29. 11. 2006
Příspěvků: 573
Web

Re: Vyhledání a výpis hodnot

Pomocí jednoho vzorce to bude dost masakr, pokud to vůbec půjde. Možná by bylo nejlepší si na to naprogramovat vlastní funkci.
Největší problém je rozsekat řetězec 1,2,3 na jednotlivá čísla - na to se dá použít např. vlastní funkce SPLITSTRING
http://www.openoffice.cz/navody/program … plitstring
K vyhledávání jmen podle čísel se pak použije VLOOKUP. Zatím jsem ale nepřišel na to, jak to skloubit do jediného vzorce.

Offline

#3 4. 3. 2011 19:19:52

hanus
Člen
Místo Olomouc
Registrace: 29. 11. 2006
Příspěvků: 573
Web

Re: Vyhledání a výpis hodnot

Tady je vlastní funkce JOINITEMS:
http://ooo.e-hanus.cz/funkce_JOINITEMS.01.ods

Function joinitems(retezec as string, rozdelovac as string, data as object) as string

    joinitems=""
    prvky = split(retezec, rozdelovac)

    for i=0 to ubound(prvky)
        for j=1 to ubound(data)
            if val(prvky(i))=data(j,1) then
                 if joinitems = "" then 
                     joinitems = data(j,2)
                 else
                     joinitems = joinitems & "," & data(j,2)
                 end if
                 exit for
            end if
        next j
    next i

End function

Ve vašem případě pak v listu použijete vzorec
=JOINITEMS(C1;",";A1:B3) resp. pokud ho budete chtít kopírovat do dalších buněk =JOINITEMS(C1;",";$A$1:$B$3)
obecně
=JOINITEMS(vzor;oddělovač;data)

Editoval hanus (5. 3. 2011 08:47:36)

Offline

#4 5. 3. 2011 09:21:54

mausr
Člen
Registrace: 2. 3. 2011
Příspěvků: 5

Re: Vyhledání a výpis hodnot

Je to super, funguje to bezvadně. Ještě mám dotaz? Šlo by udělat, abych si ve funkci JOINITEMS mohl zadat o jaký počet sloupců doprava mohl vypisovat hodnoty. Pak by to byla fantazie.

Sloupec A (prvky) 1,2,3 atd.
Sloupec B (data)
Sloupec C (data)
atd

Po zadání hodnot do buňky 1,2
- zadám do funkce parametr 1 (sloupec B) - vypíše hodnoty oddělené čárkou.
- zadám do funkce 2 (sloupec C) - vypíše hodnoty oddělené čárkou.

Děkuji

Offline

#5 5. 3. 2011 09:48:38

hanus
Člen
Místo Olomouc
Registrace: 29. 11. 2006
Příspěvků: 573
Web

Re: Vyhledání a výpis hodnot

To už je snadné, např. JOINITEMSCOL:
http://ooo.e-hanus.cz/funkce_JOINITEMSCOL.1.ods

Function joinitemscol(retezec as string, rozdelovac as string, data as object, sloupec as integer) as string

    joinitemscol=""
    if sloupec<1 then sloupec=1
    prvky = split(retezec, rozdelovac)

    for i=0 to ubound(prvky)
        for j=1 to ubound(data)
            if val(prvky(i))=data(j,1) then
                 if joinitemscol = "" then 
                     joinitemscol = data(j,sloupec)
                 else
                     joinitemscol = joinitemscol & "," & data(j,sloupec)
                 end if
                 exit for
            end if
        next j
    next i

End Function

Číslování sloupců je vzhledem k definované oblasti dat - 1 je sl. s indexy, 2 je první sloupec se jmény, 3 je druhý sl se jmény atd.
=JOINITEMSCOL(D1;",";$A$1:$C$10;3)
obecně
=JOINITEMSCOL(vzor;oddělovač;data;sloupec)


FUNKCE NEJSOU OPTIMALIZOVÁNY NA VÝKON ! tj. při velkém objemu dat by mohly fungovat pomalu, musely by se poladit. Taky nejsou moc odolné na špatně zadané vstupy.

Editoval hanus (5. 3. 2011 09:55:39)

Offline

#6 5. 3. 2011 12:58:33

mausr
Člen
Registrace: 2. 3. 2011
Příspěvků: 5

Re: Vyhledání a výpis hodnot

Otestoval jsem to a je to perfektní. Děkuji, jste opravdu znalec, klobouk dolů.

Offline

Zápatí