Hola, que tal ?
En esta oportunidad hablaremos de como ocultar los sub totales dentro de una tabla dinámica; cuando generamos una tabla dinámica, la compresión de esta se hace dificultosa debido al excesivo numero de totales y sub totales que se activan automáticamente dentro de ella, para eso la macro que a continuación presentaremos generará mayor orden y comprensión de la tabla dinámica.
Si bien es cierto, existe una forma manual de eliminar los sub totales que se generan en una tabla dinámica; sin embargo, si se está generando algún reporte automático, o no se desea perder el tiempo eliminando subtitulo por subtitulo, se preferirá la macro.
A continuación se presentará un ejemplo:
El siguiente archivo es de un caso de una planta de jugos , presenta una gran cantidad de datos que deben ser analizados, para lo cual se crea una tabla dinámica.
(Para mayor visualización de la imagen, hacer click en la misma)
A continuación se muestra la tabla dinámica:
(Para mayor visualización de la imagen, hacer click en la misma)
Se puede ver que existen Sub totales llamados "TOTAL PLANTA A" y "TOTAL PLANTA B"; para una presentación de un reporte automático o por la incomprensión de esas filas, deseo borrarlas; entonces mostraremos 3 macros, las cuales tienen diferentes formas para ocultar esos sub totales.
Macro Número 1: (Utilizando el grabar macro)
Se puede ocultar todos los sub totales de todas las columnas o etiquetas que contienen los datos como Planta,Maquina,Turno, Tipo, Cantidad de Producción, Capacidad, Perdidas,Perdidas en Tiempo (min),Rendimiento. Estos conocidos como PivotFields.
Significado de la macro: Dentro de la hoja activa, en la tabla dinámica activa llamada Ejemplo, se encuentran las siguientes etiqueta Planta,....,Rendimiento, los sub totales deben estar ocultos; son 12 veces falso porque para todos los PivotFields, se tienen 12 funciones: Suma,promedio,contar,min,max, entre otros.
Sub EliminarSubtotalesModo1()
ActiveSheet.PivotTables("Ejemplo").PivotFields("PLANTA ").Subtotals = Array( _
False, False, False, False, False, False, False, False, False, False, False, False)
ActiveSheet.PivotTables("Ejemplo").PivotFields("MAQUINA").Subtotals = Array( _
False, False, False, False, False, False, False, False, False, False, False, False)
ActiveSheet.PivotTables("Ejemplo").PivotFields("Turno ").Subtotals = Array( _
False, False, False, False, False, False, False, False, False, False, False, False)
ActiveSheet.PivotTables("Ejemplo").PivotFields("Tipo").Subtotals = Array(False, _
False, False, False, False, False, False, False, False, False, False, False)
ActiveSheet.PivotTables("Ejemplo").PivotFields("Cantidad de Producción"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Ejemplo").PivotFields("Capacidad ").Subtotals = Array( _
False, False, False, False, False, False, False, False, False, False, False, False)
ActiveSheet.PivotTables("Ejemplo").PivotFields("Perdidas ").Subtotals = Array( _
False, False, False, False, False, False, False, False, False, False, False, False)
ActiveSheet.PivotTables("Ejemplo").PivotFields("Perdidas en Tiempo (min)"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Ejemplo").PivotFields("Rendimiento ").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
End Sub
Macro Número 2: Esta Macro usa la formula With - End With, la cual sirve para eliminar las 12 veces para un mismo PivotField, en este caso para la etiqueta "Planta" dentro de la tabla dinámica "Ejemplo" se encuentran Activas o lo que es conocido como TRUE, deberán pasar al estado de oculto = False.
Esta fórmula se repetirá para los demás PivotFields (Planta,Maquina,Turno, Tipo, Cantidad de Producción, Capacidad, Perdidas,Perdidas en Tiempo (min),Rendimiento)
Sub EliminarsubtotalesModo2()
With ActiveSheet.PivotTables("Ejemplo").PivotFields("PLANTA ")
.Subtotals(1) = True
.Subtotals(1) = False
End With
Macro Número 3: Esta última forma es la más recomendada y simplificada.
Primero se define 2 variables "pt" como la tabla dinámica y "pf" como la etiqueta dentro de la tabla dinámica.
Luego, para comparar que la celda activa esta dentro de la tabla dinámica, se coloca el "On Error Resume Next" lo que significa que la celda activa debe estar dentro de la tabla dinámica para poder continuar y para que la función ActiveSheet.PivotTables pueda asignar el nombre de la tabla dinámica a la variable pt; caso contrario, se mostrará un aviso de advertencia.
Finalmente, con: For Each pf In pt.PivotFields
pf.Subtotals(1) = True
pf.Subtotals(1) = False
Next pf, se ocultaran a todos lso sub totales de las etiquetas pf que ese encuentran en la tabla dinámica pt.
Sub EliminarSubtotales3()
Dim pt As PivotTable
Dim pf As PivotField
On Error Resume Next
Set pt = ActiveSheet.PivotTables(ActiveCell.PivotTable.Name)
'Si la celda activa no se encuentra dentro de la Tabla dinámica aparecerá un mensaje de alerta
If pt Is Nothing Then
MsgBox "El cursor debe estar dentro de la Tabla Dinamica"
Exit Sub
End If
'A traves de todos los campos se extrae los totales
For Each pf In pt.PivotFields
pf.Subtotals(1) = True
pf.Subtotals(1) = False
Next pf
End Sub
Finalmente se adjunta el ejemplo. EjemploSubtotales
Gracias,
Por: Jimena Revilla
09/05/2018 a las 3:59 pm
Gracias me ha servido de mucho. Me habia volvido loco la sintaxis para quitar subtotales intentaba pasarle una matriz y no tomaba, voy a usar la macro 3 para evitar eso.