aikon36482
00martedì 24 maggio 2016 15:27
Buongiorno,
avrei bisogno di una macro che elimini i duplicati da una lista di dati secondo il criterio della data più recente.
Grazie.
cromagno
00martedì 24 maggio 2016 15:44
Ciao,
hai provato a fare qualcosa in VBA o è una richiesta "chiavi in mano"?
P.S.
Puoi ottenere la stessa cosa anche con le formule in due colonne a fianco o i doppioni nei dati iniziali devono essere necessariamente eliminati?
P.P.S.
Per capire meglio... devono rimanere i dati con la data più recente o il contrario?
Ciao
aikon36482
00martedì 24 maggio 2016 16:16
Ho provato una macro che elimina i duplicati ma non so come inserire l'altra condizione affinché mantenga il più recente.
cromagno
00martedì 24 maggio 2016 16:20
Re:
aikon36482, 24/05/2016 16.16:
Ho provato una macro che elimina i duplicati ma non so come inserire l'altra condizione affinché mantenga il più recente.
Ok,
allega la macro che hai usato (o allega di nuovo il file con la macro all'interno) e vediamo se si può integrare quella.
aikon36482
00mercoledì 25 maggio 2016 05:10
'Seleziono le celle su cui lavorare
Range("A2:B10").Select
'Ordino la colonna A
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Set currentCell = Worksheets("Foglio1").Range("A1")
Do While Not IsEmpty(currentCell)
Set nextCell = currentCell.Offset(1, 0)
If nextCell.Value = currentCell.Value Then
currentCell.EntireRow.Delete
End If
Set currentCell = nextCell
Loop
Range("A1").Select
ninai
00mercoledì 25 maggio 2016 07:14
ciao a tutti
un approccio con formule potrebbe essere:
in A2:
=SE.ERRORE(INDICE(Foglio1!$A$1:$A$9;CONFRONTA(0;INDICE(CONTA.SE($A$1:A1;Foglio1!$A$1:$A$9););0));"")
la limitazione è che non puoi mettere la formula nella riga 1
in B2:
=MAX(INDICE((Foglio1!$A$1:$A$9=A2)*Foglio1!$B$1:$B$9;))
se l'elenco univoco lo estrai con macro, puoi usare solo la seconda formula
cromagno
00mercoledì 25 maggio 2016 12:39
Ciao a tutti,
premetto che io userei la formula di ninai (un saluto)...
questo potrebbe essere un codice (lungo perchè ho voluto usare una collection per i dati univoci e una matrice per archiviare temporaneamente i dati finali):
Sub Elimina()
Dim uRiga As Long, Univoci As Collection, i As Long, j As Long, Dati(), data
Set Univoci = New Collection
uRiga = Range("A" & Rows.Count).End(xlUp).Row
On Error Resume Next
For i = 1 To uRiga
Univoci.Add Range("A" & i).Value, Key:=CStr(Range("A" & i).Value)
Next i
On Error GoTo 0
ReDim Dati(1 To Univoci.Count, 1 To 2)
For i = 1 To Univoci.Count
data = ""
For j = 1 To uRiga
Dati(i, 1) = Univoci(i)
If CStr(Range("A" & j).Value) = Univoci(i) Then
If data <> "" Then
data = IIf(Range("B" & j).Value > data, Range("B" & j).Value, data)
Else
data = Range("B" & j).Value
End If
Dati(i, 2) = data
End If
Next j
Next i
Range("A1:B" & uRiga).ClearContents
For i = 1 To UBound(Dati)
Range("A" & i).Value = Dati(i, 1)
Range("B" & i).Value = Dati(i, 2)
Next i
Set Univoci = Nothing
Erase Dati
End Sub