Sub ricerca_miglior_cliente()
Dim i As Byte, ur As Integer, M As Double
Dim col As Collection
Dim clienti As Range, cl As Range, c As Variant
Application.ScreenUpdating = False
Sheets("Giornaliera").Activate
'calcolo l'ultima cella occupata della colonna A
ur = Cells(Rows.Count, 1).End(xlUp).Row
'creo una collezione con i nomi univoci della colonna B
Set clienti = Range("b3:b" & ur)
Set col = New Collection
On Error Resume Next
For Each cl In clienti
col.Add cl.Value, CStr(cl.Value)
Next
With Sheets("Top10")
'per ogni cliente della collection..
For Each c In col
'eseguo il filtro
clienti.AutoFilter Field:=1, Criteria1:=c
'calcolo il valore Max della colonna Z filtrata
M = WorksheetFunction.Subtotal(9, Range("z3:z" & ur))
i = i + 1
'nel foglio Top10 riporto il nome del cliente
.Cells(i + 1, 2) = c
'e l'importo Max calcolato
.Cells(i + 1, 3) = M
Next
'resetto il filtro
ActiveSheet.ShowAllData
'ordino la tabella con gli importi maggiori di ogni cliente
.Range("B1:C" & i + 1).Sort Key1:=.[C1], Order1:=xlDescending, Header:=xlGuess
'seleziono il Foglio Top10 (deve essere prima visibile!)
.Select
End With
Application.ScreenUpdating = True
End Sub |