Este tutorial demostrará cómo usar el filtro de tabla dinámica en VBA.
Las tablas dinámicas son una herramienta de datos excepcionalmente poderosa de Excel. Las tablas dinámicas nos permiten analizar e interpretar grandes cantidades de datos agrupando y resumiendo campos y filas. Podemos aplicar filtros a nuestras tablas dinámicas para permitirnos ver rápidamente los datos que son relevantes para nosotros.
En primer lugar, necesitamos crear una tabla dinámica para nuestros datos. (Haga clic aquí para ver nuestra Guía de tablas dinámicas de VBA).
Crear un filtro basado en un valor de celda
Puede filtrar en una tabla dinámica utilizando VBA en función de los datos contenidos en un valor de celda; podemos filtrar en el campo Página o en un campo Fila (por ejemplo, en el campo Proveedor arriba o en el campo Oper que está en la columna Etiquetas de fila ).
En una celda vacía a la derecha de la tabla dinámica, cree una celda para contener el filtro y luego escriba los datos en la celda en la que desea filtrar la tabla dinámica.
Cree la siguiente macro de VBA:
1234567 | Sub FilterPageValue ()Dim pvFld como campo dinámicoDim strFilter como cadenaEstablecer pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Proveedor")strFilter = ActiveWorkbook.Sheets ("Sheet1"). Range ("M4"). ValuepvFld.CurrentPage = strFilterEnd Sub |
Ejecute la macro para aplicar el filtro.
Para borrar el filtro, cree la siguiente macro:
12345 | Sub ClearFilter ()Dim pTbl como tabla dinámicaEstablecer pTbl = ActiveSheet.PivotTables ("PivotTable1")pTbl.ClearAllFiltersEnd Sub |
Entonces se quitará el filtro.
Luego, podemos modificar los criterios de filtrado para filtrar en una fila de la tabla dinámica en lugar de en la página actual.
Escribir la siguiente macro nos permitirá filtrar en la fila (tenga en cuenta que el campo dinámico para filtrar ahora es el operador en lugar del proveedor).
1234567 | Sub FilterRowValue ()Dim pvFld como campo dinámicoDim strFilter como cadenaEstablecer pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Oper")strFilter = ActiveWorkbook.Sheets ("Sheet1"). Range ("M4"). ValuepvFld.PivotFilters.Add2 xlCaptionEquals`` strFilterEnd Sub |
Ejecute la macro para aplicar el filtro.
Uso de varios criterios en un filtro dinámico
Podemos agregar al filtro de valor de Fila anterior agregando criterios adicionales.
Sin embargo, como el filtro estándar oculta las filas que no son necesarias, necesitamos recorrer los criterios y mostrar las que son requeridas, mientras ocultamos las que no son necesarias. Esto se hace creando una variable Array y usando un par de Loops en el código.
1234567891011121314151617181920212223 | Sub FilterMultipleRowItems ()Dim vArray como varianteDim i como entero, j como enteroDim pvFld como campo dinámicoEstablecer pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Oper")vArray = Rango ("M4: M5")pvFld.ClearAllFiltersCon pvFldPara i = 1 a pvFld.PivotItems.Countj = 1Hacer mientras j <= UBound (vArray, 1) - LBound (vArray, 1) + 1Si pvFld.PivotItems (i) .Name = vArray (j, 1) EntoncespvFld.PivotItems (pvFld.PivotItems (i) .Name) .Visible = TrueSalir HacerDemáspvFld.PivotItems (pvFld.PivotItems (i) .Name) .Visible = FalseTerminara sij = j + 1CírculoSiguiente yoTerminar conEnd Sub |
Crear un filtro basado en una variable
Podemos usar los mismos conceptos para crear filtros basados en variables en nuestro código en lugar del valor en una celda. Esta vez, la variable de filtro (strFilter) se completa en el código mismo (por ejemplo: codificada en la macro).
1234567 | Sub FilterTextValue ()Dim pvFld como campo dinámicoDim strFilter como cadenaEstablecer pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Proveedor")strFilter = "THOMAS S"pvFld.CurrentPage = strFilterEnd Sub |