Eliminazione righe duplicate

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Peppe85
Messaggi: 3
Iscritto il: venerdì 1 giugno 2018, 18:18

Eliminazione righe duplicate

Messaggio da Peppe85 »

Buonasera a tutti,
ho dato un'occhiata al forum, ma non ho trovato la soluzione al mio problema.
Ho dei fogli con numerosi dati, ma alcune righe si ripetono, cioè mi trovo dei duplicati che vorrei eliminare.
Nell'esempio che vi posto, i duplicati da eliminare come poi vedrete, sono quelli in posizione 13 e 14 che sono perfettamente uguali in questo caso a quelli in posizione 9 e 5.

Vorrei un aiuto da parte vostra per avere una macro che mi togliesse questi duplicati.

Vi ringrazio in anticipo.
Allegati
Esempio.ods
(13.97 KiB) Scaricato 104 volte
libreoffice 5.1.1.3 ubuntu
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Eliminazione righe duplicate

Messaggio da charlie »

Ciao e benvenuto sul forum.
Se intanto ti vuoi presentare puoi farlo qui: viewforum.php?f=16
Per una panoramica delle regole del forum consulta il Manuale di sopravvivenza: http://forum.openoffice.org/it/forum/vi ... hp?f=1&t=2
Buon proseguimento.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Peppe85
Messaggi: 3
Iscritto il: venerdì 1 giugno 2018, 18:18

Re: Eliminazione righe duplicate

Messaggio da Peppe85 »

Non c'è prprio nessuno che sappia aiutarmi?
libreoffice 5.1.1.3 ubuntu
Avatar utente
gioh66
Volontario
Volontario
Messaggi: 1750
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Eliminazione righe duplicate

Messaggio da gioh66 »

Buonasera. Se ti va bene una soluzione con le formule e con una colonna d'appoggio, in E2 da copiare in basso metti

Codice: Seleziona tutto

=SE(VAL.ERRORE(CONFRONTA(A2&B2&C2&D2;$A$2:$A$16&$B$2:$B$16&$C$2:$C$16&$D$2:$D$16;0));"";CONFRONTA(A2&B2&C2&D2;$A$2:$A$16&$B$2:$B$16&$C$2:$C$16&$D$2:$D$16;0))
formula matriciale da confermare con ctrl+maiuscolo+invio
Poi a fianco (o dove ti pare) metti

Codice: Seleziona tutto

=SE(VAL.ERRORE(INDICE(A$2:A$16;PICCOLO(SE(FREQUENZA($E$2:$E$16;RIF.RIGA($E$2:$E$16)-1);RIF.RIGA($E$2:$E$16)-1);RIGHE($E$2:E2))));"";INDICE(A$2:A$16;PICCOLO(SE(FREQUENZA($E$2:$E$16;RIF.RIGA($E$2:$E$16)-1);RIF.RIGA($E$2:$E$16)-1);RIGHE($E$2:E2))))
sempre matriciale e da copiare a destra e in basso.
Allegati
righe duplicate.ods
(11.59 KiB) Scaricato 118 volte
...se sei soddisfatto delle risposte ricevute metti il [Risolto] https://forum.openoffice.org/it/forum/v ... f=9&t=5661

Libreoffice 6/7 Ubuntu 22.04 - PcLinuxOS - LinuxMint 21
Avatar utente
gioh66
Volontario
Volontario
Messaggi: 1750
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Eliminazione righe duplicate

Messaggio da gioh66 »

Mi sono accorto ora che hai libreoffice 5.1, in questo caso si possono accorciare le formule così

Codice: Seleziona tutto

=SE.ERRORE(CONFRONTA(A2&B2&C2&D2;$A$2:$A$16&$B$2:$B$16&$C$2:$C$16&$D$2:$D$16;0);"")
e

Codice: Seleziona tutto

=SE.ERRORE(INDICE(A$2:A$16;PICCOLO(SE(FREQUENZA($E$2:$E$16;RIF.RIGA($E$2:$E$16)-1);RIF.RIGA($E$2:$E$16)-1);RIGHE($E$2:E2)));"")
...se sei soddisfatto delle risposte ricevute metti il [Risolto] https://forum.openoffice.org/it/forum/v ... f=9&t=5661

Libreoffice 6/7 Ubuntu 22.04 - PcLinuxOS - LinuxMint 21
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Eliminazione righe duplicate

Messaggio da patel »

questa è la soluzione con macro, la tabella senza duplicati viene copiata nel foglio2 che deve essere già presente

Codice: Seleziona tutto

sub eliminaDup
Dim oSortDesc(4) as New com.sun.star.beans.PropertyValue
Dim aSortFields(3) as New com.sun.star.table.TableSortField

Sheet = ThisComponent.Sheets(0)
DestSheet = ThisComponent.Sheets(1)
Cellrange = Sheet.getCellRangeByName("A1:D16") ' range da trattare
numcol = Cellrange.Columns.getCount

Cell = DestSheet.getCellByPosition(0,0) ' cella destinazione
aSortFields(0).Field = 0
aSortFields(0).IsAscending = true
aSortFields(1).Field = 1
aSortFields(1).IsAscending = true
aSortFields(2).Field = 2
aSortFields(2).IsAscending = true
aSortFields(3).Field = 3
aSortFields(3).IsAscending = true
oSortDesc(0).Name = "SortFields"
oSortDesc(0).Value = aSortFields()
oSortDesc(1).Name = "IsSortColumns"
oSortDesc(1).Value = False
oSortDesc(2).Name = "OutputPosition"
oSortDesc(2).Value = Cell.CellAddress           
oSortDesc(3).Name = "CopyOutputData"
oSortDesc(3).Value = True
oSortDesc(4).Name = "ContainsHeader"
oSortDesc(4).Value = true
Cellrange.sort(oSortDesc())

' ----------- Eliminadoppie

RIGA=2
Do
  CellaPrec = ""
  Cella = ""
  for col = 0 to numcol -1
    CellaPrec = CellaPrec & DestSheet.getCellByPosition(col,RIGA - 1).string
    Cella = Cella & DestSheet.getCellByPosition(col,RIGA).string
  next
  if Cella = "" then exit do   
  If StrComp(Cella, CellaPrec, 0) = 0 Then
    DestSheet.Rows.removeByIndex(RIGA, 1)
  else
    RIGA = RIGA + 1
  End If
Loop
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Rispondi