Código VBA para aplicar y controlar el filtro automático en Excel
- Adaptando el código a tus necesidades
- Íconos de autofiltro
- Comprobar la existencia del filtro automático
- Agregar o quitar un filtro automático
- Botón desplegable Ocultar/Mostrar filtro automático
- Contar registros visibles
- Obtener rango de filtro automático
- Mostrar todo
- Aplicar filtro de texto a una columna
- Aplicar filtro de color a una columna
- Borrar una clasificación existente
- Aplicar una clasificación alfabética
- 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.
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