Questo tutorial spiegherà come utilizzare il metodo Filtro avanzato in VBA
Il filtro avanzato in Excel è molto utile quando si tratta di grandi quantità di dati a cui si desidera applicare una varietà di filtri contemporaneamente. Può anche essere usato per rimuovere i duplicati dai tuoi dati. È necessario avere familiarità con la creazione di un filtro avanzato in Excel prima di tentare di creare un filtro avanzato da VBA.
Considera il seguente foglio di lavoro.
Puoi vedere a colpo d'occhio che ci sono duplicati che potresti voler rimuovere. Il tipo di conto è una combinazione di risparmio, prestito a termine e assegno.
Per prima cosa devi impostare una sezione di criteri per il filtro avanzato. Puoi farlo in un foglio separato.
Per comodità di riferimento, ho chiamato la mia scheda dati "Database" e la mia scheda dei criteri "Criteri".
Sintassi del filtro avanzato
Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique
- Il Espressione rappresenta l'oggetto intervallo - e può essere impostato come un intervallo (ad esempio intervallo ("A1: A50") - oppure l'intervallo può essere assegnato a una variabile e tale variabile può essere utilizzata.
- Il Azione l'argomento è obbligatorio e sarà xlFilterInPlace o xlFilterCopy
- Il Gamma di criteri argomento è dove stai ottenendo i criteri da cui filtrare (il nostro foglio Criteri sopra). Questo è facoltativo in quanto non avresti bisogno di un criterio se stavi filtrando per valori univoci, ad esempio.
- Il Copia nell'intervallo l'argomento è dove inserirai i risultati del filtro: puoi filtrare in posizione o puoi copiare il risultato del filtro in una posizione alternativa. Anche questo è un argomento facoltativo.
- Il Unico anche l'argomento è facoltativo - Vero è filtrare solo su record univoci, falso è filtrare su tutti i record che soddisfano i criteri - se lo ometti, l'impostazione predefinita sarà falso.
Filtraggio dei dati sul posto
Utilizzando i criteri mostrati sopra nel foglio dei criteri, vogliamo trovare tutti i conti con un tipo di "Risparmio" e "Corrente". Stiamo filtrando sul posto.
123456789 | Sub CreateAdvancedFilter()Dim rngDatabase come intervalloDim rngCriteria As Range'definire il database e gli intervalli di criteriImposta rngDatabase = Fogli ("Database"). Intervallo ("A1: H50")Imposta rngCriteria = Fogli("Criteri").Intervallo("A1:H3")'filtra il database usando i criterirngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaFine sottotitolo |
Il codice nasconderà le righe che non soddisfano i criteri.
Nella procedura VBA sopra, non abbiamo incluso gli argomenti CopyToRange o Unique.
Reimpostazione dei dati
Prima di eseguire un altro filtro, dobbiamo cancellare quello corrente. Funzionerà solo se hai filtrato i tuoi dati sul posto.
12345 | Sotto CancellaFiltro()In caso di errore Riprendi Avanti'reimposta il filtro per mostrare tutti i datiActiveSheet.ShowAllDataFine sottotitolo |
Filtraggio di valori univoci
Nella procedura seguente, ho incluso l'argomento Unique ma ho omesso l'argomento CopyToRange. Se tralasci questo argomento, tu O devo mettere una virgola come segnaposto per l'argomento
123456789 | Sub UniqueValuesFilter1()Dim rngDatabase come intervalloDim rngCriteria As Range'definire il database e gli intervalli di criteriImposta rngDatabase = Fogli ("Database"). Intervallo ("A1: H50")Imposta rngCriteria = Fogli("Criteri").Intervallo("A1:H3")'filtra il database usando i criterirngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria,,TrueFine sottotitolo |
O è necessario utilizzare argomenti denominati come mostrato di seguito.
123456789 | Sub UniqueValuesFilter2()Dim rngDatabase come intervalloDim rngCriteria As Range'definire il database e gli intervalli di criteriImposta rngDatabase = Fogli ("Database"). Intervallo ("A1: H50")Imposta rngCriteria = Fogli("Criteri").Intervallo("A1:H3")'filtra il database usando i criterirngDatabase.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=rngCriteria, Unique:=TrueFine sottotitolo |
Entrambi gli esempi di codice sopra eseguiranno lo stesso filtro, come mostrato di seguito: i dati con solo valori univoci.
Utilizzo dell'argomento CopyTo
123456789 | Sub CopyToFilter()Dim rngDatabase come intervalloDim rngCriteria As Range'definire il database e gli intervalli di criteriImposta rngDatabase = Fogli ("Database"). Intervallo ("A1: H50")Imposta rngCriteria = Fogli("Criteri").Intervallo("A1:H3")'copia i dati filtrati in una posizione alternativarngDatabase.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rngCriteria, CopyToRange:=Range("N1:U1"), Unique:=TrueFine sottotitolo |
Si noti che avremmo potuto omettere i nomi degli argomenti nella riga di codice del filtro avanzato, ma l'utilizzo di argomenti denominati rende il codice più facile da leggere e comprendere.
Questa riga sotto è identica alla riga nella procedura mostrata sopra.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range("N1:U1"), True |
Una volta eseguito il codice, i dati originali vengono ancora mostrati con i dati filtrati mostrati nella posizione di destinazione specificata nella procedura.
Rimozione dei duplicati dai dati
Possiamo rimuovere i duplicati dai dati omettendo l'argomento Criteri e copiando i dati in una nuova posizione.
1234567 | Sub RimuoviDuplicati()Dim rngDatabase come intervallo'definire il databaseImposta rngDatabase = Fogli ("Database"). Intervallo ("A1: H50")'filtra il database in un nuovo intervallo con un valore univoco impostato su truerngDatabase.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("N1:U1"), Unique:=TrueFine sottotitolo |