¿Cómo solucionar elementos duplicados en una tabla dinámica usando VBA?

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.

Conoce nuestra tienda

Ver más productos

Mejora tu nivel y logra tus objetivo

Excel

Excel cursos

Access

cursos de Access

Power BI

cursos power BI

Ayúdanos a hacer crecer el proyecto

Deja un comentario