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

#1 22. 7. 2021 15:57:52

onlybenz
Člen
Registrace: 22. 7. 2021
Příspěvků: 2

Odstranění dat na základě druhého sloupce

Dobrý den, chtěl bych vás požádat o radu, jak odstranit data ze sloupce A na základě dat v sloupci B. Tzn. v sloupci A mám na řádcích soubor dat a chtěl bych odstranit, nebo označit řádky, které mám ve sloupci B. Předem děkuji za radu a přeji hezký den. Marek

Offline

#2 22. 7. 2021 16:13:47

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

Re: Odstranění dat na základě druhého sloupce

Možností je více.
    Já bych doporučil vytvořit pomocný sloupec (například "C") kam zadáte vzorec pro porovnání hodnot počínaje prvním řádkem (nwbo tím který je první pod hlavičkou takto :

=IF(A1=B1;1;"")

    Tento vzorec zkopírujte do celého pole (například C1:C1000), vzorce ze sloupce zkopírujte do paměti a vložta jinak - jen čísla. Nakonec úsek A1:C1000 seřaďte podle "C". Všechny řádky s jedničkou budou u sebe a Vy je můžete naráz smazat.
    Pokud byste potřeboval zachovat původní pořadí, přidáte další pomocný sloupec (například "D") kam zadáte vzorec

=ROW()

a opět načtete do paměti a zpět vložíte jen jako čísla. Je jedno zda bude pořadí pomocí ROW() ve sloupci C a vzorec IF ve sloupci D. Oba vzorce může rozkopírovat naráz a stejně tak vložit zpět jen čísla, jenom při řazení zadáte 1. podle vzorce IF a 2. podle ROW().


Přeji úspěch

Editoval neutr (22. 7. 2021 16:15:56)


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 22. 7. 2021 18:20:12

onlybenz
Člen
Registrace: 22. 7. 2021
Příspěvků: 2

Re: Odstranění dat na základě druhého sloupce

neutr napsal(a)

Možností je více.
    Já bych doporučil vytvořit pomocný sloupec (například "C") kam zadáte vzorec pro porovnání hodnot počínaje prvním řádkem (nwbo tím který je první pod hlavičkou takto :

=IF(A1=B1;1;"")

    Tento vzorec zkopírujte do celého pole (například C1:C1000), vzorce ze sloupce zkopírujte do paměti a vložta jinak - jen čísla. Nakonec úsek A1:C1000 seřaďte podle "C". Všechny řádky s jedničkou budou u sebe a Vy je můžete naráz smazat.
    Pokud byste potřeboval zachovat původní pořadí, přidáte další pomocný sloupec (například "D") kam zadáte vzorec

=ROW()

a opět načtete do paměti a zpět vložíte jen jako čísla. Je jedno zda bude pořadí pomocí ROW() ve sloupci C a vzorec IF ve sloupci D. Oba vzorce může rozkopírovat naráz a stejně tak vložit zpět jen čísla, jenom při řazení zadáte 1. podle vzorce IF a 2. podle ROW().


Přeji úspěch


Moc vam dekuji za pomoc. Zkusil jsem to a nedari se mi to. Myslim si, ze by to touto cestou slo za predpokladu, ze je v sloupcich A i B stejny pocet dat. Nefungovalo by to spis jako kontrola, jestli je ve dvou radcich stejny udaj? Ja resim situaci, kdy mam v sloupci A 10 000 prijmeni a v Sloupci B 1000 prijmeni. Tech 1000 ze sloupce B je take v sloupci A a ja potrebuji techto 1 000 prijmeni ze sloupce A odstranit. Aby tam zustalo 9 000 prijmeni. Jeste jednou dekuji a rad vam poslu Donate. Je to mozne, prosim vas?

Offline

#4 23. 7. 2021 05:30:33

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

Re: Odstranění dat na základě druhého sloupce

Toto je jiná problematika, ale má také více řešení.
A) pro případ, že se v jednotlivých seznamech ze sloupce „A", „B" nevyskytují duplicity :
     Použijeme vzorec

=IF(COUNTIF($B$1:$B$1000;A1)>0;1;"")

Nejprve vložíme vzorec do C1 a odtudo ho kopírujeme dolů na konec s daty. Ihned vzorce z tohoto úseku C1:C10000 načteme do paměti a vložíme zpět jen čísla. Následně seřadíme úsek A1:C10000 podle „C" a řádky s jedničkou ve sloupci „C" smažeme. (pokud potřebujete seřadit na původní pořadí přidáte ještě sloupec s ROW(), který zkopírujete se vzorcem IF a nakonec seřadíte podle tohoto sloupce. Na závěr smažete všechny pomocné sloupce.



B) pro případ, kdy se mohou v některém sloupci původních dat vyskytovat duplicity : 
     Nejprve upravíme nejlépe na samostatných listech seznam ze sloupce „A" tak že přiřadíme značku množiny – například „a" před, nebo za sloupec se jmény. Podobně pro seznam ze sloupce „B" vybavíme značkou například „b".
     Nyní oba seznamy sloučíme do jednoho a setřídíme podle sloupce se jmény. Do dalšího sloupce („C") vložíme vzorec :

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

     Tento vzorec použijeme ve sloupci „C" a od řádku číslo 2. (Vložíme prázdný řádek nad seznamy pokud tam už není například hlavička), a zkopírujeme do C2:C10001 (na konec sloučeného seznamu ve sloupci „C" – podle dat v„A". ). Opět celý úsek vzorců  C2:C10001 načteme do paměti a zpět vložíme jen čísla.
     Nakonec setřídíme úsek  A2:C10001 podle „C" – tím se řádky s jedničkou dostanou k sobě a tyto řádky smažeme. podobně se zbavíme zbylých jmen z množiny "b" (jsou - li tam nějaká). Opět platí, že pokud byste potřeboval původní pořadí přidáte na začátku také sloupec s ROW() a výsledek podle tohoto na konci seřadíte a tento pomocný smažete.


     Upozorňuji na to, že v seznamech mohou být málo zjevné odlišnosti. Například pokud mezi jménem a příjmením není stálé pořadí (mohou být přehozené), nebo je v jednom seznamu chyba v interpunkci (i,í) a podobně. V takových případech by se mělo testovat například jednotlivě jméno a příjmení. Jsou k tomu vzorce, ale to by už chtělo ukázku.
     Počet 10 tisíc řádků se vzorci už může být velká zátěž pro počítač, potom bych doporučil rozdělit na dvě, nebo více menších úloh apod.
     


     V podobných případech se většinou ukáže něco, co autor dotazu před tím netušil a byť se sebe více snažil, nepopsal problém validně. Takže kdykoliv na něco podobného narazíte – nebojte se znovu zeptat. Většina těch co odpovídají mají s podobným postupem zkušenosti.


PS:
     Pokud byste potřeboval mazat kratší seznam v případě ad A), změníte jen buňku testovaného sloupce plus úsek delšího sloupce ve kterém vyhledávate tedy :

=IF(COUNTIF($A$1:$A$1000;B1)>0;1;"")

Předpokladem je, že databázi úseku máte někde poznamenanou a potřebujete zachovat pouze jména z kratšího seznamu. Potom byste zřejmě zbytek sloupce "A" smazal. Jiným postupem by byl dotaz do různých listů. V případě potřeby může být dotaz veden i do různých sešitů. Postupů může být více.

Editoval neutr (23. 7. 2021 05:51:33)


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 23. 7. 2021 12:11:11

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

Re: Odstranění dat na základě druhého sloupce

Ve sloupci C bych viděl tento vzorec: =IF(ISNA(MATCH(A1;$B$1:$B$1000;0));A1;""). Výsledkem bude seznam ze sloupce A s vynechanými položkami, které se vyskytovaly také ve sloupci B. Poté lze data vykopírovat a seřadit, tím se odstraní mezery.


LibreOffice 6.2.

Offline

#6 27. 7. 2021 16:43:54

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

Re: Odstranění dat na základě druhého sloupce

Na sloupce A a B zapnout automatický filtr, ve sloupci B vybrat neprázdné hodnoty, vymazat nebo zkopírovat A.

Z dotazu není zřejmé, jestli se mají odstranit hodnoty z A, které
+ mají v B nějakou hodnotu,
+ hodnota v B = A,
+ hodnota v A existuje někde ve sloupci B,
+ něco jiného.

Přečetl jsem si ještě druhý příspěvek. do C stačí

MATCH(A1;$B$1:$B$1000;0).

pokud by to hledalo dlouho, tak o hodně rychlejší je:
setřídit B,
do C: VLOOKUP(A1;$B$1:$B$1000;1) = A1

Editoval lp. (27. 7. 2021 16:59:50)

Offline

Zápatí