Sub CreaTablaPivote()
    ' Traducido (y ligeramente modificado) de
    ' http://www.thespreadsheetguru.com/blog/2014/9/27/vba-guide-excel-pivot-tables
    Dim v_Hoja As Worksheet
    Dim v_PivotCache As PivotCache
    Dim v_TablaPivote As PivotTable
    Dim v_PosPivote As String
    Dim v_DatosFuente As String
    Dim v_NombrePivote As String

    ' Guarda el nombre que usará al crear la tabla dinámica.
    v_NombrePivote = "TablaPivote1"
    
    ' Determina el rango del que quieres hacer la tabla dinámica.
    ' Esto lo puedes modificar para que haga la selección.
    ' En el ejemplo, selecciona desde A1 hacia abajo hasta encontrar una celda vacía en la
    ' columna A y desde A1 hacia la derecha hasta encontrar una celda vacía en el renglón 1.
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select

    
    ' Le asigna la dirección en formato renglón - columna a la variable v_DatosFuente
    v_DatosFuente = ActiveSheet.Name & "!" & Selection.Address(ReferenceStyle:=xlR1C1)

    ' Crea una hoja nueva.
    Set v_Hoja = Sheets.Add
    
    ' Le dice a Excel dónde poner la table dinámica (en este caso, en A3 de la hoja nueva).
    v_PosPivote = v_Hoja.Name & "!" & v_Hoja.Range("A3").Address(ReferenceStyle:=xlR1C1)
    
    ' Crea el Pivot Cache a partir de los datos.
    Set v_TablaPivoteCache = ActiveWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=v_DatosFuente)
    
    'Crea una tabla dinámica a partir del Pivot Cache.
    Set v_TablaPivote = v_TablaPivoteCache.CreatePivotTable( _
        TableDestination:=v_PosPivote, _
        TableName:=v_NombrePivote)

End Sub
