Sei sulla pagina 1di 7

Macro para crear una tabla

dinmica en Excel
Si eres una persona que crea constantemente tablas dinmicas para el anlisis
de datos, es altamente recomendable utilizar una macro para automatizar la
creacin de una tabla dinmica de manera que puedas mejorar tu productividad
en Excel.
La creacin y manipulacin de una tabla dinmica desde cdigo VBA es un
tema que puede ser muy extenso, as que es necesario determinar el alcance
para este artculo. Al final de nuestro ejercicio sabrs cmo crear una tabla
dinmica en una nueva hoja de Excel, cuyos datos de origen se encuentren en
una tabla de Excel.
He dividido el proceso en varios pasos de manera que sea ms fcil explicar el
desarrollo de la macro:
Insertar una nueva hoja de Excel
Crear el Pivot Cache
Crear la Tabla Dinmica en blanco
Insertar columnas a la tabla dinmica
Insertar filas a la tabla dinmica
Insertar valores a la tabla dinmica
La siguiente imagen muestra la tabla que utilizar como los datos de origen
para la tabla dinmica.

La tabla tiene el nombre Tabla1 y est en la hoja Datos. Dicha tabla tiene ms
de 30 mil registros y la utilizaremos para crear un reporte que me permitir
visualizar rpidamente las ventas por cada una de las zonas en los diferentes
meses del ao.
La macro se llamar CrearTablaDinamica y colocar su cdigo en un nuevo
mdulo que he creado para ese propsito:

A continuacin detallar cada parte de la macro y al final encontrars el enlace


para descargar el archivo que contiene todo el cdigo.

Insertar una nueva hoja de Excel

En el primer paso del proceso crearemos la hoja llamada TablaDinamica donde


posteriormente insertar la nueva tabla dinmica. Pero antes de insertarla
utilizar el mtodo Delete de la coleccin Worksheets para eliminar la hoja en
caso de que exista previamente.
1
2
3
4
5
6

'Eliminar Hoja (Si Existe)


On Error Resume Next
Worksheets("TablaDinamica").Delete
'Crear Hoja TablaDinamica
Worksheets.Add(Before:=ActiveSheet).Name = "TablaDinamica"

El mtodo Add es el encargado de agregar la nueva hoja y la colocar antes de


la hoja activa. La propiedadName me ayuda a indicar el nombre de la hoja
insertada.

Crear el Pivot Cache


Las tablas dinmicas en Excel tienen un cach, que es conocido por su nombre
en ingls como Pivot Cache, y es un objeto que tiene una rplica de los datos y
que se encuentra en la memoria del computador.
Este objeto en memoria (Pivot Cache) hace que las tablas dinmicas respondan
de una manera rpida y eficiente al analizar los datos. Para crear la Pivot Cache
utilizamos la siguiente instruccin:
1
2
3

'Crear Pivot Cache


Set PCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, SourceData:="Tabla1")

Observa que el parmetro SourceData especifica el nombre de la tabla de Excel


que contiene los datos y que para nuestro ejemplo es la Tabla1.

Crear la Tabla Dinmica en blanco


Ahora que hemos creado el Pivot Cache, podemos crear una nueva tabla
dinmica que quedar asociada a dicho cache. La instruccin que utilizaremos
es la siguiente:
1
2
3

'Crear Tabla dinmica


Set TDinamica = PCache.CreatePivotTable( _
TableDestination:="TablaDinamica!R3C1", TableName:="Tabla dinmica1")

El parmetro TableDestination indica la ubicacin de la nueva tabla dinmica,


que para nuestro ejemplo ser la hoja TablaDinamica en la celda R3C1, que es
la referencia R1C1 para la celda A3. El parmetro TableNamenos permite
indicar el nombre de la nueva tabla dinmica.

Si ejecutramos el cdigo que llevamos hasta ahora, tendramos una hoja de


Excel con una tabla dinmica en blanco como se muestra en la siguiente
imagen:

En los siguientes pasos agregaremos las columnas, filas y valores a la tabla


dinmica que hemos creado.

Insertar columnas a la tabla dinmica


Para insertar una columna a la tabla dinmica recin creada, utilizaremos el
mtodo PivotFields indicando el nombre del campo que vamos a insertar.
1
2
3
4
5

'Insertar columnas
With TDinamica.PivotFields("Zona")
.Orientation = xlColumnField
.Position = 1
End With

La diferencia entre una columna y una fila dentro de la tabla dinmica lo hace el
valor de la propiedadOrientation que para una columna deber
ser xlColumnField.

Insertar filas a la tabla dinmica


Para nuestra tabla dinmica de ejemplo, insertar las filas Ao y Mes utilizando
el siguiente cdigo:
1
2
3
4
5
6
7
8
9
10

'Insertar filas
With TDinamica.PivotFields("Ao")
.Orientation = xlRowField
.Position = 1
End With
With TDinamica.PivotFields("Mes")
.Orientation = xlRowField
.Position = 2
End With

Observa el valor de la propiedad Orientation que tiene el valor xlRowField que


convierte a ambos campos en filas para nuestra tabla dinmica.
Ya que tendr dos filas, es importante indicar la posicin que tendr cada una
de ellas. En este caso, la columna Ao tendr la primera posicin y la
columna Mes la segunda para tener un resultado como el siguiente:

Insertar valores a la tabla dinmica

Lo nico que falta en nuestra tabla dinmica son los valores y tambin los
podemos insertar con el mtodoPivotFields pero debemos cambiar el valor de la
propiedad Orientation para que su valor sea xlDataField.
Adems, podemos indicar algunas propiedades adicionales como la
propiedad Function que nos ayudar a indicar el tipo de clculo que ser
aplicado a los valores de la tabla dinmica. Para nuestro ejemplo, utilizaremos
la suma indicada por el valor xlSum.
1
2
3
4
5
6
7

'Insertar Valores
With TDinamica.PivotFields("Monto")
.Orientation = xlDataField
.Position = 1
.Function = xlSum
.NumberFormat = "#,##0"
End With

Tambin puedes ver en el cdigo la propiedad NumberFormat que me permite


indicar el formato de los valores.
Ya hemos completado el cdigo de las partes principales de una tabla dinmica
y al ejecutar la macro obtendremos el resultado siguiente:

Este ejemplo nos ha ayudado a crear una tabla dinmica con cdigo VBA. Te
sugiero descargar el archivo de trabajo donde encontrars el cdigo completo

de la macro y adems encontrars algunas indicaciones adicionales para


cambiar el cdigo y utilizar la macro con tus propios datos.
Adems, la hoja Datos tiene un botn llamado Crear tabla dinmica donde
podrs hacer clic para ejecutar la macro que acabamos de crear.

Potrebbero piacerti anche