Pagina 1 di 1

Eliminazione righe duplicate

Inviato: venerdì 1 giugno 2018, 18:27
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.

Re: Eliminazione righe duplicate

Inviato: martedì 5 giugno 2018, 7:34
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.

Re: Eliminazione righe duplicate

Inviato: lunedì 18 giugno 2018, 11:08
da Peppe85
Non c'è prprio nessuno che sappia aiutarmi?

Re: Eliminazione righe duplicate

Inviato: martedì 19 giugno 2018, 18:33
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.

Re: Eliminazione righe duplicate

Inviato: martedì 19 giugno 2018, 18:39
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)));"")

Re: Eliminazione righe duplicate

Inviato: venerdì 22 giugno 2018, 11:01
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