Filtro avanzado de VBA

Este tutorial explicará cómo usar el método de filtro avanzado en VBA

El filtrado avanzado en Excel es muy útil cuando se trata de grandes cantidades de datos en los que desea aplicar una variedad de filtros al mismo tiempo. También se puede utilizar para eliminar duplicados de sus datos. Debe estar familiarizado con la creación de un filtro avanzado en Excel antes de intentar crear un filtro avanzado desde VBA.

Considere la siguiente hoja de trabajo.

Puede ver de un vistazo que hay duplicados que quizás desee eliminar. El tipo de cuenta es una combinación de ahorro, préstamo a plazo y cheque.

Primero debe configurar una sección de criterios para el filtro avanzado. Puede hacer esto en una hoja separada.

Para facilitar la referencia, he nombrado mi hoja de datos "Base de datos" y mi hoja de criterios "Criterios".

Sintaxis de filtro avanzada

Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique

  • los Expresión representa el objeto de rango, y se puede establecer como un rango (por ejemplo, rango (“A1: A50”)) o el rango se puede asignar a una variable y esa variable se puede utilizar.
  • los Acción El argumento es obligatorio y será xlFilterInPlace o xlFilterCopy
  • los Rango de criterio El argumento es de donde obtiene los Criterios para filtrar (nuestra hoja de Criterios arriba). Esto es opcional, ya que no necesitaría un criterio si estuviera filtrando por valores únicos, por ejemplo.
  • los CopyToRange El argumento es donde colocará los resultados del filtro: puede filtrar en su lugar o puede hacer que el resultado del filtro se copie en una ubicación alternativa. Este también es un argumento opcional.
  • los Único el argumento también es opcional - Cierto es filtrar solo por registros únicos, Falso es filtrar todos los registros que cumplen los criterios; si omite esto, el valor predeterminado será Falso.

Filtrado de datos en el lugar

Utilizando los criterios que se muestran arriba en la hoja de criterios, queremos encontrar todas las cuentas con un tipo de "Ahorro" y "Actual". Estamos filtrando en su lugar.

123456789 Sub CreateAdvancedFilter ()Dim rngDatabase como rangoDim rngCriteria como rango'definir la base de datos y los rangos de criteriosEstablecer rngDatabase = Sheets ("Base de datos"). Rango ("A1: H50")Establecer rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'filtrar la base de datos usando los criteriosrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaEnd Sub

El código ocultará las filas que no cumplan con los criterios.

En el procedimiento de VBA anterior, no incluimos los argumentos CopyToRange o Unique.

Restableciendo los datos

Antes de ejecutar otro filtro, tenemos que borrar el actual. Esto solo funcionará si ha filtrado sus datos en su lugar.

12345 Sub ClearFilter ()En caso de error, reanudar siguiente'restablecer el filtro para mostrar todos los datosActiveSheet.ShowAllDataEnd Sub

Filtrar valores únicos

En el procedimiento siguiente, he incluido el argumento Unique pero omití el argumento CopyToRange. Si omite este argumento, CUALQUIERA tienes que poner una coma como marcador de posición para el argumento

123456789 Sub UniqueValuesFilter1 ()Dim rngDatabase como rangoDim rngCriteria como rango'definir la base de datos y los rangos de criteriosEstablecer rngDatabase = Sheets ("Base de datos"). Rango ("A1: H50")Establecer rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'filtrar la base de datos usando los criteriosrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueEnd Sub

O necesita usar argumentos con nombre como se muestra a continuación.

123456789 Sub UniqueValuesFilter2 ()Dim rngDatabase como rangoDim rngCriteria como rango'definir la base de datos y los rangos de criteriosEstablecer rngDatabase = Sheets ("Base de datos"). Rango ("A1: H50")Establecer rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'filtrar la base de datos usando los criteriosrngDatabase.AdvancedFilter Acción: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueEnd Sub

Los dos ejemplos de código anteriores ejecutarán el mismo filtro, como se muestra a continuación: los datos solo tienen valores únicos.

Usando el argumento CopyTo

123456789 Sub CopyToFilter ()Dim rngDatabase como rangoDim rngCriteria como rango'definir la base de datos y los rangos de criteriosEstablecer rngDatabase = Sheets ("Base de datos"). Rango ("A1: H50")Establecer rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'copiar los datos filtrados a una ubicación alternativarngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range ("N1: U1"), Unique: = TrueEnd Sub

Tenga en cuenta que podríamos haber omitido los nombres de los argumentos en la línea de código de Filtro avanzado, pero el uso de argumentos con nombre hace que el código sea más fácil de leer y comprender.

Esta línea a continuación es idéntica a la línea del procedimiento que se muestra arriba.

1 rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True

Una vez que se ejecuta el código, los datos originales todavía se muestran con los datos filtrados que se muestran en la ubicación de destino especificada en el procedimiento.

Eliminar duplicados de los datos

Podemos eliminar los duplicados de los datos omitiendo el argumento Criterios y copiando los datos en una nueva ubicación.

1234567 Sub RemoveDuplicates ()Dim rngDatabase como rango'definir la base de datosEstablecer rngDatabase = Sheets ("Base de datos"). Rango ("A1: H50")'filtrar la base de datos a un nuevo rango con un conjunto único en verdaderorngDatabase.AdvancedFilter Acción: = xlFilterCopy, CopyToRange: = Rango ("N1: U1"), Único: = VerdaderoEnd Sub

wave wave wave wave wave