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

#1 8. 2. 2010 08:50:06

VelkyBubak
Člen
Registrace: 29. 3. 2007
Příspěvků: 15

Hledání dat a výpisy jiných dat

Mám sloupec s hodnotami R, O, V a CD pro dny v měsíci a další sloupec vedle se jmény.

Přemýšlím, jak to udělat, aby se mi do dalšího sloupce řadily jména u kterých je hodnota R.


Pro příklad:

1. sloupec 2. sloupec výsledek
Katka            R     Katka
Tomáš            R     Tomáš 
Michal           CD    Mikeš
Honza            O
Mikeš            R

Offline

#2 8. 2. 2010 10:18:06

Plastique
Učím lidi pracovat s počítači
Místo Opava
Registrace: 9. 10. 2004
Příspěvků: 176
Web

Re: Hledání dat a výpisy jiných dat

Označte datovou oblast - sloupce A a B (u vás 1 a 2, číslem se ale označují řádky, proto píšu A B). Nabídka Data | Filtr | Standardní filtr, Název pole = B, Podmínka rovná se, Hodnota R. Tlačítko Více a vyberte, kam kopírovat, OK.


Kniha, která odhalí 10 nejčastějších chyb webových stránek.

Stáhněte si zdarma: www.zlatywordpress.cz

Offline

#3 8. 2. 2010 12:00:44

VelkyBubak
Člen
Registrace: 29. 3. 2007
Příspěvků: 15

Re: Hledání dat a výpisy jiných dat

Díky, ještě mám pár dotazů

1) Jde, aby se oblast B (2.sloupec) měnila v závislosti na nějaké další podmínce (třeba poleB1="Po"=> sloupecB,poleC1="Po"=> sloupecC) na jiné sloupce (2.,3.,... a další) a oblast A zůstávala stejná?

2) Přenáším data mezi domácím openoffice a pracovním excelem. Bude to fungovat i tam?

Předem díky za nápady.

Offline

#4 8. 2. 2010 12:23:25

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 769

Re: Hledání dat a výpisy jiných dat

Pokud je počet hodnot malý, lze použít maticový vzorec.

Pokud blok začíná na a2 a v buňce d2 je hledaná hodnota (R) může vzorec pro buňku c2 vypadat třeba takto:

=IF(ROW()-ROW($C$2)+1>COUNTIF($B$2:$B$1000;$D$2);"";INDEX(A$2:A$1000;SMALL(IF($B$2:$B$1000=$D$2;ROW($A$2:$A$1000);ROW($A$2)+ROWS($A$2:$A$1000))-1;ROW()-ROW($C$2)+1)))

Vzorec se uloží trojhmatem (crtl-shift-enter) jako maticový a dál se zkopíruje do dalších buněk.

Data k vypsání jsou v oblasti A2:A1000, klíče jsou v B2:B1000

Vzorec předpokládá, že data budou nejvýše do řádku 1000, pokud dat bude více lze vzorec upravit, ale pro velké množství dat je filtr zřejmě vhodnější.

Editoval lp. (8. 2. 2010 16:34:48)

Offline

#5 11. 2. 2010 21:35:48

VelkyBubak
Člen
Registrace: 29. 3. 2007
Příspěvků: 15

Re: Hledání dat a výpisy jiných dat

lp. napsal(a)

=IF(ROW()-ROW($C$2)+1>COUNTIF($B$2:$B$1000;$D$2);"";INDEX(A$2:A$1000;SMALL(IF($B$2:$B$1000=$D$2;ROW($A$2:$A$1000);ROW($A$2)+ROWS($A$2:$A$1000))-1;ROW()-ROW($C$2)+1)))

Přesně to jsem potřeboval, jen, a zatím nevím z jakého důvodu (ještě pořád jsem do matic tak úplně nepronikl, ale snažím se) to funguje správně (počítá se stejným řádkem pro oblast i klíč), když napíšu místo jediné -1 ve vzorci -2
Takto:

=IF(ROW()-ROW($C$2)+1>COUNTIF($B$2:$B$1000;$D$2);"";
INDEX(A$2:A$1000;SMALL(IF($B$2:$B$1000=$D$2;ROW
($A$2:$A$1000);ROW($A$2)+ROWS($A$2:$A$1000))-2;
ROW()-ROW($C$2)+1)))

Editoval VelkyBubak (11. 2. 2010 21:39:11)

Offline

#6 12. 2. 2010 11:16:36

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 769

Re: Hledání dat a výpisy jiných dat

Je to celkem jednoduché. Je třeba číst odzadu!

=IF(ROW()-ROW($C$2)+1>COUNTIF($B$2:$B$1000;$D$2);  
                      ' funkce INDEX vrací chybu, pokud je index mimo zadané pole.
                      ' spočítáme tedy počet možných výsledků a místo chyby dáme ""
                      ' pokud nám chybové hlášky nevadí, není nutné
 "";                  
 INDEX(A$2:A$1000;    ' Zdrojová data
       SMALL(                     ' podle pozice v poli pro výstup dá index shodné
                                  ' položky
          IF($B$2:$B$1000=$D$2;          ' IF dá vektor čísel řádků 
                                         ' $B$2:$B$1000 je pole klíčů, 
                                         ' $D$2 je hledaná hodnota
             ROW($A$2:$A$1000);            ' Pokud je klíč nalezen, dáme číslo řádku
             ROW($A$2)+ROWS($A$2:$A$1000)  ' Pokud klíč není nalezen, dáme číslo, které 
                                           ' odkazuje za prohledávané pole
                                           ' není důležité, jaké je, jen musí být větší
                                           ' třeba ROW($A$1000) + 1, ...
                                           ' (aby správně fungovala funkce SMALL)

          )
           -ROW($A$2) + 1;             ' Převedeme čísla řádků na indexy
                                       ' Potřebujeme pořadí hledané 
                                       ' položky v poli $A$2:$A$1000, počítáno od jedné
                                       ' -1 platilo, pokud data začínala na řádku 2, 
                                        
          ROW()-ROW($C$2)+1            ' Pořadí v oblasti výstupu (počítáno od jedné)
                                       ' (Výsledky jsou ve sloupci od pozice $C$2)
       )
 )
)

Editoval lp. (12. 2. 2010 11:17:36)

Offline

Zápatí