Código VBA para aplicar y controlar el filtro automático en Excel

Índice
  1. Adaptando el código a tus necesidades
  2. Íconos de autofiltro
  3. Comprobar la existencia del filtro automático
  4. Agregar o quitar un filtro automático
  5. Botón desplegable Ocultar/Mostrar filtro automático
  6. Contar registros visibles
  7. Obtener rango de filtro automático
  8. Mostrar todo
  9. Aplicar filtro de texto a una columna
  10. Aplicar filtro de color a una columna
  11. Borrar una clasificación existente
  12. Aplicar una clasificación alfabética
  13. Aplicar un orden de clasificación personalizado

Los autofiltros son una gran característica de Excel. A menudo son una forma más rápida de ordenar y filtrar datos que recorrer cada celda de un rango.

Esta publicación proporciona las principales líneas de código para aplicar y controlar la configuración del Autofiltro con VBA.

Adaptando el código a tus necesidades

Cada fragmento de código siguiente se aplica a ActiveSheet (es decir, cualquier hoja que esté actualmente en uso en el momento en que se ejecuta la macro). Es fácil aplicar el código a otras hojas cambiando la sección de código que hace referencia a ActiveSheet.

'Aplicar a una hoja específica por nombreHojas("NombreHoja").AutoFilter...
'Aplicar a una hoja específica por su posición en la pestaña más a la izquierda. Siendo 1 la primera pestaña.Hojas(1).Autofiltro...
'Aplicar a una hoja específica por su nombre de código VBA'El nombre de código VBA es la propiedad "(Nombre)" de la hoja de trabajoHoja1.Autofiltro...
'Aplicar a una hoja específica en un libro de trabajo diferente.Workbooks("AnotherWorkbook.xlsx").Sheets("Sheet1").AutoFilter...

Íconos de autofiltro

Cuando se utilizan Autofiltros, los iconos en la parte superior de las columnas indican si se ha aplicado alguna configuración.Íconos de autofiltro

Comprobar la existencia del filtro automático

Cada hoja de trabajo solo puede contener un Autofiltro. El siguiente código comprueba la existencia de un Autofiltro comprobando la propiedad AutoFilterMode de la hoja.

'Compruebe si ya existe un Autofiltro. Si ActiveSheet.AutoFilterMode = True Entonces 'Haga algoEnd If

Agregar o quitar un filtro automático

'Aplicar filtro a la 'Región actual' que contiene la celda A1.ActiveSheet.Range("A1").AutoFilter

El Autofiltro se aplicará a la "región actual" de las celdas. La región actual representa las celdas que rodean la celda seleccionada y que no están separadas por una fila o columna en blanco.

Intentar agregar un Autofiltro a una celda vacía generará un mensaje de error.

'Eliminar AutoFilterActiveSheet.AutoFilterMode = Falso

Botón desplegable Ocultar/Mostrar filtro automático

Los botones desplegables se pueden ocultar, dando la apariencia de que no hay ningún Autofiltro en la hoja de trabajo. Esto es fantástico si se utiliza VBA para controlar el Autofiltro como parte de un proceso; el usuario no podrá aplicar su propia configuración.

'Ocultar el filtro desplegable de Celdas por número de campo o por rangoActiveSheet.Range("A1").AutoFilter Field:=1, Visibledropdown:=FalseActiveSheet.Range("A1").AutoFilter Field:=2, Visibledropdown:=False
'Muestra el filtro desplegable de Celdas por número de campo o por rangoActiveSheet.Range("A1").AutoFilter Field:=1, Visibledropdown:=TrueActiveSheet.Range("A1").AutoFilter Field:=2, Visibledropdown:=True

Contar registros visibles

Después de aplicar un filtro, contar las celdas visibles en la primera columna mostrará la cantidad de registros que cumplen con los criterios aplicados.

'Cuente el número de filas que son visibles en el Autofiltro', incluido el encabezado (de ahí el -1 al final) MsgBox ActiveSheet.AutoFilter.Range.Columns(1). _ Celdas especiales(xlCellTypeVisible).Cuenta - 1

Obtener rango de filtro automático

El siguiente código le mostrará el rango de celdas que cubre el Autofiltro.

'Obtener rango de Autofiltro, incluido el encabezado filaMsgBox ActiveSheet.AutoFilter.Range.Address

Mostrar todo

Mostrar todo en el Autofiltro provocará un error si no se ha aplicado un filtro.

'Primero verifique si se ha aplicado un filtro. Si ActiveSheet.FilterMode = True Luego 'Mostrar todos los datos ActiveSheet.ShowAllDataEnd Si

Aplicar filtro de texto a una columna

El siguiente ejemplo muestra cómo aplicar un filtro de texto para cualquier valor de "A" o "B".

'Aplicar un filtro de texto a una columnaActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:="=A", _ Operador:=xlOr, Criteria2:="=B"

El filtrado avanzado es una de las funciones más útiles de AutoFilter. Los ejemplos muestran cómo aplicar diferentes criterios mediante el uso de comodines.

Es igual a: Criteria1:="=Apple"No es igual a: Criteria1:="Apple"Comienza con: Criteria1:="=*Apple"Termina con: Criteria1:="=Apple*"Contiene: Criteria1:="=*Apple *"No contiene: Criterio1:="*Apple*"

Los operadores permiten aplicar múltiples filtros a una sola columna. Los filtros pueden ser "y" cuando se cumplan ambos criterios, o "o" cuando se cumpla cualquiera de los criterios.

O: Operador:=xlOrAnd: Operador:=xlAnd

Aplicar filtro de color a una columna

Los autofiltros permiten filtrar las celdas por color. El código de color RGB a continuación se puede utilizar para ordenar por cualquier color.

'Aplicar filtro de color usando un color RGBActiveSheet.Range("$A$1:$A$7").AutoFilter Field:=1, Criteria1:=RGB(255, 255, 0), _ Operador:=xlFilterCellColor
'Filtrar por color sin rellenoActiveSheet.Range("$A$1:$A$7").AutoFilter Field:=1, Operador:=xlFilterNoFill

Borrar una clasificación existente

'Borrar el campo ordenadoActiveSheet.AutoFilter.Sort.SortFields.Clear

Aplicar una clasificación alfabética

'Borrar el campo ordenadoActiveSheet.AutoFilter.Sort.SortFields.Clear'Configurar las opciones de clasificaciónActiveSheet.AutoFilter.Sort.SortFields.Add Order:=xlAscending, _ SortOn:=xlSortOnValues, Key:=Range("A1:A7")'Aplicar el sortActiveSheet.AutoFilter.Sort.Apply

Para aplicar orden descendente, cambie la propiedad Orden a xlDescending:

Orden:=xlDescendente

Aplicar un orden de clasificación personalizado

El orden alfabético y alfabético inverso puede ser el orden de clasificación más probable; sin embargo, se puede aplicar cualquier orden de clasificación personalizado. El siguiente ejemplo ordenará en el orden "L", "J", "B" y luego "Q".

'Borrar el campo ordenadoActiveSheet.AutoFilter.Sort.SortFields.Clear'Establecer el orden en un pedido personalizadoActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range("A2:A7"), _ SortOn:=xlSortOnValues, Order:= xlAscending, _ CustomOrder:="L,J,B,Q"'Aplicando sortActiveSheet.AutoFilter.Sort.Apply

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...