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

#1 23. 12. 2012 22:19:00

matas
Člen
Registrace: 23. 12. 2012
Příspěvků: 1

Porovnanie dvoch stlpcov - VYŘEŠENO

ahojte.

Neviete mi prosím poradiť, ako porovnať bunky v dvoch stĺpcoch s rozdielnym počtom riadkov?

t.z.
Mám dva stĺpce, v prvom je 500 buniek (riadkov), v druhom len 50. Potrebujem vymazať z prvého stĺpca všetky bunky, ktoré obsahujú niektorú z buniek (hodnôt) druhého stĺpca.


Vďaka za pomoc smile

_______________________________________
Značím jako vyřešené


;o)

Editoval sedlacekdan (4. 1. 2013 19:48:43)

Offline

#2 25. 12. 2012 16:08:23

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

Re: Porovnanie dvoch stlpcov - VYŘEŠENO

Předpokládáme, že údaje jsou ve více buňkách jednoho řádku (například A1:D1), ale řídí se buňkou ve sloupci "A". To je těch 500, které se mají porovnat. Ve druhém listě je v úseku A1:A50 seznam hesel kterými se testuje.
1. Najdeme poslední sloupec s údaji na listu 1 - tedy buňka E1. Tam zadáme vzorec :
=IF(COUNTIF(list2.$A$1:$A$50;A1)=1;1;"")
2. Nyní klepneme Enter, a načteme vzorec do paměti.
3. Stiskneme Ctrl+End. Držíme dál Shift+Ctrl+šipka nahoru a tím se nám vybere sloupec E1:E500.
4. Vložíme údaje - nejlépe Ctrl+V - sloupec se vyplní. Hned načteme zpět do paměti - Ctrl+C.
5. Vložíme zpět nyní již jen jako "text a čísla" - (vybereme "vložit jinak" a zaškrtnout text a čísla" v dialogu.)
6. Nyní stiskneme Ctrl+End, následně stiskneme ještě Ctrl+Home. Tím dostaneme do paměti celý úsek A1:E500. Nyní ho setřídíme podle "E". Tam kde se vyskytují jedničky je úsek určený ke smazání. Vybereme tedy sloupec E s jedničkami a odstraníme řádky.
7. Někdy potřebujeme setřídit do původního pořadí. Toho bychom docílili snadno. Do sloupce "E" bychom zadali =ROW() a do sloupce "F" teprve vzorec =IF(COUNTIF(list2.$A$1:$A$50;A1)=1;1;"").
Následně oba sloupce načíst do paměti a vložit jen jako text a čísla. Setřídit a smazat podle bodu 6 a následně setřídit zbytek podle sloupce "E". Dostaneme původní pořadí jen bez "duplicit".


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. 12. 2012 04:15:38

PetrValach
Člen
Registrace: 24. 5. 2007
Příspěvků: 561

Re: Porovnanie dvoch stlpcov - VYŘEŠENO

To je docela děsivě složité (teda dlouhé, nic na tom není). Nešlo by do toho nějak zakomponovat tohle?

http://www.openoffice.cz/doplnky/doplnk … i-obrysu-a


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

Offline

#4 26. 12. 2012 07:43:08

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

Re: Porovnanie dvoch stlpcov - VYŘEŠENO

Rozšíření "Remove duplicates" je zajímavé, nicméně popisovanou potřebu nevystihuje. Na vině jsem zřejmě já, protože jsem poslední větu naformuloval takto: Dostaneme původní pořadí jen bez "duplicit". Slovo duplicity jsem dal do uvozovek. Nejde o duplicity v pravém smyslu slova. Ve sloupci na list1 nemusí být 2x. Porovnávané hodnoty jsou na listu 2. Navíc paradoxně duplicity v listu 1 zůstanou, pokud se v listu 2 nevyskytují jako heslo.


   Možná by šlo oba seznamy dát pod sebe na jediný list a následně použít "Remove duplicates". To ovšem musí posoudit zadavatel. Já si myslím, že by to mohla být chyba. Nevíme za jakým účelem se výběr na listu 1 dělá. Navíc na takový postup stačí "standardní filtr".


   K té složitosti: Princip je velice jednoduchý. Stačilo by použít =COUNTIF(list2.$A$1:$A$500;A1). Tedy Pouze Countif. Ve výsledku by se ale ve sloupci "E" objevily jedničky a nuly. Šlo by výsledky setřídit stejně dobře, jen by se muselo najít rozhraní mezi jedničkami a nulami. Ve výše popisovaném řešení už nuly nejsou - jen jedničky. A ty se automaticky setřídí na začátku (od E1 - například k E8).

   Takový postup je daný řadou zkušeností. Kdysi jsem používal podobný výběr jen s tím, že tam bylo více hodnot, nažli 2 (1,0). Postupně jsem mazal pomocí dialogu "najdi a nahraď" hledanou hodnotu. Za hledanou hodnotu jsem dosazoval "null" (tedy vůbec nic - jen jsem určenou hodnotu smazal). Po setřídění hledaná hodnota už neexistovala ve sloupci, ale příslušné položky byly na konci. Postup jsem nahrál jako makro, které automaticky hodnoty rozdělovalo do nových listů. V makru jsem použil vyhledávání a nahrazování jako "MIN, nebo MAX". Dokud proměnná COUNTA dávala hodnotu > 0, makro běželo. Ve výsledku pak byl sešit a tolika listy, kolik bylo původních vyhledávacích hodnot. Já jsem je navíc jednotlivě ukládal do csv, takže ve výsledku jsem měl v adresáři hotovou strukturu jednotlivých databází. Při nahrávání makra jsem se opíral právě o klávesové zkratky, takže bylo jedno kolik je jednotlivých vyhledávacích hodnot a kolik zástupců měla jednotlivá hodnota.


   Takže většinu té složitosti tvoří "vedlejší efekty", ale při kopírování vzorce a použití návodu krok po kroku by to nemělo vadit. V budoucnu si pak již mnohem zkušenější uživatel vzpomene na řešení, které mělo vhodné vlastnosti (lepší, nežli jen například výsledek s jedničkami i nulami a podívá se jak jsem toho docílil - už bude vědět proč jsem to dělal právě takhle.
   Základní řešení jsem navíc rozšířil o možnost docílit "původního uspořádání", což zadavatel vůbec asi nepředpokládal, ale zřejmě by stejně přišel na to, že potřebuje původní pořadí. Existuje i možnost smazat hledané a zachovat i původní čísla řádků, pokud je potřeba vázat na číslo řádku jako datový údaj (čísla řádků jsou shodná před i po smazání dat, po smazaných datech zbyde prázdný řádek). Tak daleko jsem ale nezašel.


   Používat rozšíření podobného typu je sice dobré, ale postupně je OOo ověšena mnoha rozšířeními jako vánoční stromeček. Rozšíření jsou postavena většinou (to je i případ "Remove duplicates") na starší verze OOo a mohou způsobovat problémy. Takže pokud obsažené funkce nepotřebuji denně, rozšíření nehledám. Pokud se mi nějaké skutečně hodí, tak ho sice nainstaluji, ale běh povolím až když to potřebuji. Pak se mi ale za delší dobu stane, že si už nemůžu vzpomenout proč jsem rozšíření instaloval - pokud to přímo z názvu nevyplývá jednoznačně. Takže jsem opatrný na instalaci rozšíření.

Editoval neutr (26. 12. 2012 10:08:17)


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 26. 12. 2012 19:56:24

LIT
Člen
Místo Liberec
Registrace: 8. 12. 2012
Příspěvků: 57

Re: Porovnanie dvoch stlpcov - VYŘEŠENO

Myslím že pomocí Standartního filtru půjde celý postup zjednodušit.
Vložit vzorec dle bodu 4,ale označit celou oblast s daty (A1:E500).Pomocí Ctrl + X oblast vyjmout a vložit ji mimo původní oblast (pomocí Vložit jinak -text,čísla).Data necháme označená a pomocí podmínek Standartního filtru  je vložit zpět do  původní oblasti.
ad 7
To je možné vyřešit přímo vložením funkce Row do vzorce, za podmínky, že oblast začíná na druhém řádku

=IF(COUNTIF(List2.$A$1:$A$50;A1)=1;1;ROW())

Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ
Windows 10, Libre Office, Lenovo Ideapad

Offline

#6 26. 12. 2012 20:24:26

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

Re: Porovnanie dvoch stlpcov - VYŘEŠENO

Ano, šlo by to tak, nebo i podobně jak uvádí LIT. Fungovalo by to i pro mnohem početnější zápisy, kde by už hrozilo, že pod COUNTIF sešit klekne. Ale když by šlo o takový případ, doporučil bych jiné řešení.
- Opět se nakopíruje porovnávaná množina pod tu šetřenou, a obě se setřídí. Stejné názvy jsou pod sebou.
- Vložíme na začátek prázdný řádek (data začínají na řádku A2:např.D2).
- Do E2 vložíme

=IF(OR(A1=A2;A2=A3)=1;"";1)

- zkopírujeme až na konec, načteme do paměti a vložíme zpět jen jako hodnoty (text a čísla).
- duplicity (obě, nebo i více) nemají ve sloupci E nic. Takže setřídíme a tam kde není jednička smažeme. Původní seznam se už bez hodnot kterými porovnáváme.


   Metoda má velkou výhodu v tom, že vzorce jsou minimalizované. Musíme ale nejdříve zkontrolovat, jestli v datech originálně nejsou duplicity. Ty by se eliminovaly a vznikla by chyba, když by nebyla duplicitní hodnota mezi porovnávanými.


   Možností je určitě víc, zejména s využitím různých vzorců. COUNTIF není jedinou možností. O makrech nemluvě. Ale pro daný případ snadno vyhoví jak countif, tak postup filtrem. A to buď tak, že postup je vylepšen podle LIT, nebo že se odfiltrované duplicity nahradí přímo za původně porovnávané hodnoty (za těch 50 na listu 2), protože další porovnání může navazovat pomocí odfiltrovaných položek. Jde o to, co potřebuje zadavatel matas.


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

Zápatí