Filtro avanzato VBA

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

wave wave wave wave wave