Stránky dotazů a odpovědí české a slovenské komunity uživatelů kancelářského balíku LibreOffice (více informací)

Zeptejte se
0

Uplné odstranění duplicit

otázka položena 2020-02-01 00:10:26 +0200

Ahoj, jakým způsobem odstraním duplicity v tomto smyslu. Tabulka obsahuje jméno Jirka, Petr, Jirka a potřebuji aby mi zůstalo jen jméno Petr - to jediné bylo unikátní, Duplicitní jméno Jirka chci úplně smazat protože bylo duplicitní. Děkuji

editovat změnit štítky označit porušení pravidel uzavřít spojit smazat
0

otázka zodpovězena 2020-02-02 18:26:13 +0200

gravatar pro kamlan

updated 2020-02-03 09:59:41 +0200

Makro které ponechá jen unikáty, řádky s veškerými duplicitami odstraní

Sub smazNeunikaty 'smaže neunikátní řádky dle hodnot ve sloupci ve kterém je zrovna buňkový kurzor (NENECHÁVÁ PRVNÍ VÝSKYT DUPLIKÁTU jak to dělá Filtr - Bez duplikátů, či doplněk RemoveDuplicates)
    dim oDoc, oCont, oList, oVyber, oSloupec, iSloupec&, i&, pAdr(), iPocet&, s$, ps(), ps2(), j%, s2$, iComp%, bVelik%, bDupl as boolean, oRadek, oCur, ss$
    oDoc=thisComponent
    oCont=oDoc.currentController
    oList=oCont.ActiveSheet 'aktivní list
    oVyber=oDoc.currentSelection 'aktivní buňka
    if oVyber.supportsService("com.sun.star.sheet.SheetCell") then 'jde jen o buňku, nikoliv výběr
        iSloupec=oVyber.cellAddress.column 'číslo aktuálního sloupce
        oSloupec=oList.getCellRangeByPosition(iSloupec,0,iSloupec,oList.rangeAddress.endRow) 'vybrat celý sloupec
        rem dále trochu tý čachrace s názvy buněk abych dostal rozsah ve sloupci od první vyplněné do poslední vyplněné; jde i přes oList.createCursorByRange(oSloupec) a goToEndOfusedArea() jak je to vyřešené v doplňku RemoveDulicates
        oVyber=oSloupec.queryContentCells(com.sun.star.sheet.CellFlags.VALUE OR com.sun.star.sheet.CellFlags.DATETIME OR com.sun.star.sheet.CellFlags.STRING OR com.sun.star.sheet.CellFlags.FORMULA) 'poptat buňky co něco obsahují
        if oVyber.RangeAddressesAsString="" then 've sloupci není žádný obsah
            msgbox "jde o prázdný sloupec",32
            exit sub
        end if
        pAdr=oVyber.RangeAddressesAsString 'adresy obsahových buněk jako řetězec, např. když tam budou mezi obsahem nějaké prázdné řádky tak List1.A1.A2;List1.A4:A5
        ps=split(pAdr(0),";") 'v poli nyní ps(0)=List1.A1:A2 a ps(1)=List1.A4:A5
        ps2=split(ps(0),":") 'první část sloupce čili List1.A1
        s=ps2(0) & ":" 'první část adresy List1.A1:
        ss=ps(ubound(ps())) 'poptávka po druhé části adresy
        ps2=split(ss,":") 'buď A5 nebo celá adresa (List1.A5) pokud byl poslední řádek osamělý
        if ubound(ps2())=0 then ps2=split(ss,".") 'poslední řádek je osamělý (před ním je prázdný), takže jeho adresa je jen List1.A5 takže split podle .
        ss=ps2(ubound(ps2())) 'A5
        s=s & ss 'požadovaná adresa List1.A1:A5
        oVyber=oList.getCellRangeByName(s) 'výběr i s případnými prázdnými řádky mezi daty
        oCont.select(oVyber) 'označit výběr
        i=msgbox("Rozlišovat velikost písmen při porovnání?",35)
        if i=6 then 'rozlišovat velikost písmen při porovnání
            bVelik=1
        elseif i=7 then 'nerozlišovat velikost písmen
            bVelik=0
        else 'cancel
            goto konec
        end if
        iPocet=oVyber.rows.count 'počet řádků ve výběru
        dim pData(iPocet-1) as variant 'pole s hodnotami ve kterém budu hledat jen unikáty
        dim pB(iPocet-1) as boolean 'pole s počtem indexů rovným počtu řádků v prošlém sloupci a ve kterém bude TRUE když nepůjde o unikátní řádek
        pData=oVyber.getDataArray() 'hodnoty ze sloupce
        for i=lbound(pData()) to ubound(pData())
            s=pData(i)(0) 'aktuální prvek
            bDupl=false 'bude-li nalezena duplicita tak abych mohl označit i její první výskyt
            for j=i+1 to ubound(pData()) 'porovnám aktuální prvek se všemi dalšími prvky v poli
                if pB(j)=TRUE then goto sem 'už byl nějaký prvek označen jako duplicitní tak ho nemusím porovnávat
                s2=pData(j)(0) 'porovnávaný prvek s aktuálním
                if strComp(s,s2,bVelik ...
(další)
editovat označit porušení pravidel smazat odkaz další
0

otázka zodpovězena 2020-02-01 10:54:57 +0200

gravatar pro raal

Podívejte se zde:https://ask.libreoffice.org/cs-cz/question/140293/v-tabulce-se-nektere-zaznamy-opakuji-jak-na-to/

editovat označit porušení pravidel smazat odkaz další

Komentáře

gravatar pro raalraal ( 2020-02-01 10:58:36 +0200 )editovat
Přihlásit/Zaregistrovat se pro zadání odpovědi
Pokud odpověď řeší váš dotaz, označte ji jako správnou (ikona zaškrtnutí nalevo), odpovědnu tím značně zpřehledníte.

Nástroje pro otázky

1 sledující

Statistika

Otázka položena: 2020-02-01 00:10:26 +0200

Přečtena: 45 krát

Naposledy aktualizována: Feb 03