Guía de VBA para tablas dinámicas

Este tutorial demostrará cómo trabajar con tablas dinámicas usando VBA.

Las tablas dinámicas son herramientas de resumen de datos que puede utilizar para extraer información clave y resúmenes de sus datos. Veamos un ejemplo: tenemos un conjunto de datos de origen en las celdas A1: D21 que contiene los detalles de los productos vendidos, que se muestran a continuación:

Usar GetPivotData para obtener un valor

Suponga que tiene una tabla dinámica llamada PivotTable1 con Ventas en el campo Valores / Datos, Producto como campo Filas y Región como campo Columnas. Puede utilizar el método PivotTable.GetPivotData para devolver valores de tablas dinámicas.

El siguiente código devolverá $ 1,130.00 (las ventas totales para la región este) de la tabla dinámica:

1 MsgBox ActiveCell.PivotTable.GetPivotData ("Ventas", "Región", "Este")

En este caso, Sales es el "DataField", "Field1" es la Región y "Item1" es East.

El siguiente código devolverá $ 980 (las ventas totales del Producto ABC en la región norte) de la tabla dinámica:

1 MsgBox ActiveCell.PivotTable.GetPivotData ("Ventas", "Producto", "ABC", "Región", "Norte")

En este caso, Ventas es el “Campo de datos”, “Campo1” es Producto, “Artículo1” es ABC, “Campo2” es Región y “Artículo2” es Norte.

También puede incluir más de 2 campos.

La sintaxis de GetPivotData es:

GetPivotData (Campo de datos, Campo1, Objeto 1, Campo2, Item2… ) dónde:

Parámetro Descripción
Campo de datos Campo de datos como ventas, cantidad, etc. que contiene números.
Campo 1 Nombre de un campo de columna o fila de la tabla.
Objeto 1 Nombre de un artículo en el campo 1 (opcional).
Campo 2 Nombre de un campo de columna o fila en la tabla (Opcional).
Ítem ​​2 Nombre de un artículo en el campo 2 (opcional).

Crear una tabla dinámica en una hoja

Para crear una tabla dinámica basada en el rango de datos anterior, en la celda J2 de la Hoja1 del libro de trabajo activo, usaríamos el siguiente código:

1234567891011 Hojas de trabajo ("Hoja1"). Celdas (1, 1) .SeleccionarActiveWorkbook.PivotCaches.Create (SourceType: = xlDatabase, SourceData: = _"Sheet1! R1C1: R21C4", Versión: = xlPivotTableVersion15) .CreatePivotTable _TableDestination: = "Sheet1! R2C10", TableName: = "PivotTable1", DefaultVersion _: = xlPivotTableVersion15Hojas ("Hoja1"). Seleccione

El resultado es:

Crear una tabla dinámica en una hoja nueva

Para crear una tabla dinámica basada en el rango de datos anterior, en una nueva hoja, del libro de trabajo activo, usaríamos el siguiente código:

12345678910111213 Hojas de trabajo ("Hoja1"). Celdas (1, 1) .SeleccionarSábanas.AñadirActiveWorkbook.PivotCaches.Create (SourceType: = xlDatabase, SourceData: = _"Sheet1! R1C1: R21C4", Versión: = xlPivotTableVersion15) .CreatePivotTable _TableDestination: = "Sheet2! R3C1", TableName: = "PivotTable1", DefaultVersion _: = xlPivotTableVersion15Hojas ("Hoja2"). Seleccione

Agregar campos a la tabla dinámica

Puede agregar campos a la tabla dinámica recién creada llamada PivotTable1 según el rango de datos anterior. Nota: La hoja que contiene su tabla dinámica debe ser la hoja activa.

Para agregar Producto al campo Filas, usaría el siguiente código:

123 ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Producto"). Orientación = xlRowFieldActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Producto"). Posición = 1

Para agregar Región al campo Columnas, usaría el siguiente código:

123 ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Región"). Orientación = xlColumnFieldActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Región"). Posición = 1

Para agregar Ventas a la Sección de Valores con el formato de número de moneda, usaría el siguiente código:

123456789 ActiveSheet.PivotTables ("PivotTable1"). AddDataField ActiveSheet.PivotTables (_"PivotTable1"). PivotFields ("Ventas"), "Suma de ventas", xlSumCon ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Suma de ventas").NumberFormat = "$ #, ## 0.00"Terminar con

El resultado es:

Cambio del diseño del informe de la tabla dinámica

Puede cambiar el diseño del informe de su tabla dinámica. El siguiente código cambiará el diseño del informe de su tabla dinámica a forma tabular:

1 ActiveSheet.PivotTables ("PivotTable1"). TableStyle2 = "PivotStyleLight18"

Eliminar una tabla dinámica

Puede eliminar una tabla dinámica usando VBA. El siguiente código eliminará la tabla dinámica llamada PivotTable1 en la hoja activa:

12 ActiveSheet.PivotTables ("PivotTable1"). PivotSelect "", xlDataAndLabel, TrueSelection.ClearContents

Dar formato a todas las tablas dinámicas en un libro de trabajo

Puede formatear todas las tablas dinámicas en un libro de trabajo usando VBA. El siguiente código usa una estructura de bucle para recorrer todas las hojas de un libro de trabajo y eliminar todas las tablas dinámicas en el libro de trabajo:

12345678910111213 Sub FormattingAllThePivotTablesInAWorkbook ()Dim wks como hoja de trabajoDim wb como libro de trabajoEstablecer wb = ActiveWorkbookDim pt como tabla dinámicaPara cada semana en wb.Para cada punto en semanas.pt.TableStyle2 = "PivotStyleLight15"Siguiente ptPróximas semanasEnd Sub

Para obtener más información sobre cómo usar Loops en VBA, haga clic aquí.

Eliminar campos de una tabla dinámica

Puede eliminar campos en una tabla dinámica usando VBA. El siguiente código eliminará el campo Producto en la sección Filas de una tabla dinámica denominada PivotTable1 en la hoja activa:

12 ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Producto"). Orientación = _xlHidden

Crear un filtro

Se ha creado una tabla dinámica llamada PivotTable1 con Producto en la sección Filas y Ventas en la sección Valores. También puede crear un filtro para su tabla dinámica usando VBA. El siguiente código creará un filtro basado en Región en la sección Filtros:

123 ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Región"). Orientación = xlPageFieldActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Región"). Posición = 1

Para filtrar su tabla dinámica en función de un elemento de informe único en este caso, la región este, debe usar el siguiente código:

12345 ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Región"). ClearAllFiltersActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Región"). CurrentPage = _"Este"

Supongamos que desea filtrar su tabla dinámica en función de varias regiones; en este caso, este y norte, usaría el siguiente código:

1234567891011121314 ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Región"). Orientación = xlPageFieldActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Región"). Posición = 1ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Región"). _EnableMultiplePageItems = VerdaderoCon ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Región").PivotItems ("Sur"). Visible = False.PivotItems ("Oeste"). Visible = FalseTerminar con

Actualizar su tabla dinámica

Puede actualizar su tabla dinámica en VBA. Usaría el siguiente código para actualizar una tabla específica llamada PivotTable1 en VBA:

1 ActiveSheet.PivotTables ("PivotTable1"). PivotCache.Refresh
wave wave wave wave wave