Estrarre dati da un elenco e formare una tabella di riepilogo dati estratti

Quando abbiamo necessità, e capita spesso, di volere un riepilogo di dati presenti in una tabella (elenco), estratti in base ad un nostro criterio di ricerca, possiamo adoperare una routine realizzata in vba. Ottenere una tabella che sia il frutto di un filtraggio di dati esistenti, sicuramente interesserà più di un "pellegrino", per questo propongo una routine che, nella sua semplicità, potrà essere adattata e modificata da chiunque. Facendo il solito esempio, supponiamo di avere un elenco di fatture da cui vorremo estrarre solo quelle relative ad un certo nominativo, e delle fatture, ci interessi avere l'importo di ognuna, per farne anche il totale. Potrebbe essere altresì un elenco di agenti, con a lato il fatturato, e di voler conoscere quanto ha fatturato un determinato agente. Di situazioni similari sono pieni i fogli di excel, quindi procediamo con l'esempio delle fatture. Nell'esempio avremo la colonna A da A1 a A200 dove avremo il nome del cliente o del fornitore, e nella colonna B l'importo di ogni fattura. Sfrutteremo la colonna E per ottenere il nostro riepilogo, ed useremo la cella C1 per scrivere il nome di cui vogliamo eseguire la ricerca. La cella F2 invece ci servirà per ottenere la somma totale degli importi delle fatture estratte(filtrate). Ognuno sarà libero di adattare i propri riferimenti sia alle colonne che contengono l'elenco dati, sia alla colonna dove creare la tabella riassuntiva, come pure alle celle che ospiteranno il criterio di ricerca (C1) o il totale (F2). Alcune considerazioni su come lavora la routine: dato un valore in C1 assegnato alla variabile X, per ogni cella del range A1:A200 verrà svolta la ricerca dello stesso valore (X), se trovato, verrà copiato il valore che è nella cella a destra (Offset), e verrà copiato nella colonna E, dove col metodo End, verrà cercata la prima cella libera e lì, incollato il valore copiato. Ricordo che con End(xlDown).Offset ecc. E' necessario far trovare le prime due celle da inizio selezione (E1) occupate da qualsiasi cosa ( per chiarimenti leggere eventualmente il paragrafo "Copia/Incolla2" in questa sezione). Ad ogni lancio routine, facciamo pulire le celle in E, prima di iniziare il ciclo di ricerca, copia, incolla. Nella cella F2 metteremo la funzione =SOMMA(F3:F203) per avere il totale degli importi filtrati. A posto di scrivere un nome nella cella C1, sarà possibile inserire una casella di riepilogo (combobox) con le proprietà LinkedCell = C1 e ListFillRange = A1:A200. Questo l'esempio:

 

E queste le istruzioni:

Sub riassumi()
Dim CL As Object
Dim X

Application.ScreenUpdating = False
Range("E3:E200").ClearContents
X = Range("C1").Value
For Each CL In Range("A1:A200")
If CL = X Then
CL.Offset(0, 1).Select
Selection.Copy
Range("E1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select

'incollo i dati.
With ActiveCell
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End With
End If
Next
Application.CutCopyMode = False
End Sub


Buon lavoro.