Contenido
Para solucionar elementos duplicados en una tabla dinámica usando VBA, puedes escribir un script que limpie los datos antes de construir la tabla dinámica o que modifique la tabla existente para eliminar duplicados. Aquí tienes un ejemplo de cómo podrías manejar esto:
- Eliminar duplicados en la fuente de datos antes de crear la tabla dinámica: Asegúrate de que los datos que usas para construir la tabla dinámica no contengan duplicados. Puedes usar el método `RemoveDuplicates` de VBA para limpiar los datos antes de crear la tabla dinámica.
- Modificar la tabla dinámica después de su creación: Si tu tabla dinámica ya está creada y necesitas eliminar duplicados en los datos que se están mostrando, puedes ajustar el script para manejar eso.
Aquí tienes un ejemplo del primer enfoque:
Sub EliminarDuplicadosYCrearTablaDinamica()
Dim ws As Worksheet
Dim tbl As ListObject
Dim rngDatos As Range
Dim ptCache As PivotCache
Dim pt As PivotTable
Dim wsPivot As Worksheet
Dim lastRow As Long
' Define la hoja de trabajo y el rango de datos
Set ws = ThisWorkbook.Sheets("NombreDeLaHojaDeDatos")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' Suponiendo que los datos están en la columna A
Set rngDatos = ws.Range("A1:D" & lastRow) ' Asegúrate de usar el rango adecuado para tus datos
' Eliminar duplicados en los datos de origen
rngDatos.RemoveDuplicates Columns:=Array(1, 2, 3, 4), Header:=xlYes ' Cambia según las columnas a verificar
' Crear una nueva hoja para la tabla dinámica
Set wsPivot = ThisWorkbook.Sheets.Add
wsPivot.Name = "TablaDinamica"
' Crear la cache de la tabla dinámica
Set ptCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngDatos)
' Crear la tabla dinámica en la nueva hoja
Set pt = ptCache.CreatePivotTable(TableDestination:=wsPivot.Range("A1"), TableName:="MiTablaDinamica")
' Configurar la tabla dinámica (cambia los campos según tus necesidades)
With pt
.PivotFields("NombreDeCampo").Orientation = xlRowField
.PivotFields("OtroCampo").Orientation = xlColumnField
.AddDataField .PivotFields("CampoDatos"), "Suma de CampoDatos", xlSum
End With
End Sub
En este script:
- Primero, se define el rango de datos y se eliminan los duplicados usando `RemoveDuplicates`.
- Luego se crea una nueva hoja para la tabla dinámica.
- Se crea la tabla dinámica usando una cache y se configura según sea necesario.
Asegúrate de ajustar los nombres de las hojas, rangos y nombres de campos según corresponda a tus datos.