Si has usado alguna vez una tabla dinámica (o Pivot Table) de Excel, es posible que te hayas encontrado alguna vez en la situación que vamos a comentar en este artículo.
¿Cuál es la situación?
Los datos de origen de una tabla dinámica pueden cambiar y los elementos que antes estaban pero ya no no deberían volver a aparecer en los desplegables que se utilizan para filtrar.
Sin embargo, incluso después de pulsar sobre el botón refrescar, los antiguos nombres siguen apareciendo junto con los nuevos.
¿Y cómo se soluciona?
En este artículo proponemos 3 soluciones para limpiar los valores que permanecen en los desplegables y no hay manera de eliminar:
- Manualmente
- Programáticamente
- Modificando las propiedades de la tabla dinámica (sólo es posible a partir de la versión 2007 de Excel).
Limpiar los valores de forma manual.
La forma manual de eliminar los valores consiste en desagrupar todo lo que esté agrupado. Después de esto hay que eliminar el campo de la tabla dinámica (arrastrándolo fuera de la tabla). A continuación pincharemos sobre la opción "Actualizar" de la tabla y, por último, volvemos a introducir el campo en la misma.
Limpiar los valores mediante una llamada a un procedimiento en Visual Basic.
En versiones de Excel 2002 o posteriores, se pueden modificar las propiedades de una tabla dinámica para prevenir que aparezcan elementos eliminados del origen de datos de la siguiente forma:
Sub DeleteOldItemsV1()
Dim pt As PivotTable
Dim ws As Worksheet
Dim pc As PivotCache
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
pt.PivotCache.MissingItemsLimit = xlMissingItemsNone
Next pt
Next ws
For Each pc In ActiveWorkbook.PivotCaches
On Error Resume Next
pc.Refresh
Next pc
End Sub
Si estamos hablando de versiones de Excel anteriores a la 2002, podemos utilizar el siguiente código para eliminar los elementos antiguos:
Sub DeleteOldItemsV2()
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
On Error Resume Next
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
pt.RefreshTable
pt.ManualUpdate = True
For Each pf In pt.VisibleFields
If pf.Name <> "Data" Then
For Each pi In pf.PivotItems
If pi.RecordCount = 0 And _
Not pi.IsCalculated Then
pi.Delete
End If
Next pi
End If
Next pf
pt.ManualUpdate = False
pt.RefreshTable
Next pt
Next ws
End Sub
Cambiar las opciones de la tabla dinámica (sólo Excel 2007 y versiones posteriores)
En Excel 2007 y en las versiones posteriores ya podemos modificar las opciones de la tabla dinámica, que modificabamos mediante Visual Basic en el punto anterior, pero a través del menú de opciones.
Pinchamos con el botón derecho sobre una celda de la tabla dinámica y hacemos click sobre "Opciones de la tabla dinámica…". En la pestaña "Datos", nos vamos a la sección "Mantener los elementos eliminados del origen de datos" y seleccionamos "Ninguno" en el desplegable. Por último, guardamos los cambios y refrescamos la tabla dinámica pulsando sobre el botón "Actualizar" de la misma.