Le macro si inseriscono in un modulo:
Sub copia_ordinadata()
'pulisco lo spazio dove si creerà la nuova tabella
Range([e2], [g2].End(xlDown)).ClearContents
'copio la tabella origine in altre colonne (ma potrebbe benissimo essere anche un file di appoggio)
Columns("a:c").Select
Selection.Copy
Columns("i:k").Select
Selection.PasteSpecial
'ordino in base alla data più recente
Selection.Sort _
Key1:=Range("j1"), _
Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'richiamo le altre macro
Nomi_Univoci
Importo_relativo
'cancello le colonne che avevo usato come appoggio
Columns("i:k").ClearContents
[e2].End(xlDown).Offset(1, 0).Select
End Sub
Sub Nomi_Univoci()
'indispensabile dichiarare l'elenco da memorizzare come New Collection
Dim Intervallo As Range
Dim Elenco As New Collection
Dim Righe
Dim Colonne
'imposto l'intervallo ricercando nella tabella origine
With Range("a1").CurrentRegion
Righe = .Rows.Count - 1
Colonne = .Columns.Count
Set Intervallo = .Offset(1, 0).Resize(Righe, Colonne)
End With
On Error Resume Next
'memorizzo l'elenco considerando solo i nominativi univoci (Elenco.Add....)
For Riga = 1 To Righe
Elenco.Add Intervallo(Riga, 9).Value, CStr(Intervallo(Riga, 9).Value)
Next
On Error GoTo 0
'riporto l'elenco memorizzato in una nuova colonna, la e (5), dopo le intestazioni (Riga + 1)
For Riga = 1 To Elenco.Count
Cells(Riga + 1, 5) = Elenco(Riga)
Next
End Sub
Sub Importo_relativo()
'assegno le formule ai nominativi trovati
For i = 2 To Cells(65536, 5).End(xlUp).Row
Range("f" & i) = "=VLOOKUP(RC[-1],C[3]:C[5],2,FALSE)"
Range("g" & i) = "=VLOOKUP(RC[-2],C[2]:C[4],3,FALSE)"
Next i
'trasformo le formule in valori
valori = Range([f2], [g2].End(xlDown)).Value
Range([f2], [g2].End(xlDown)) = valori
End Sub
|