En primer lugar, las tablas dinámicas o pivot tables nos permiten agrupar y comparar datos de diversas formas. Asimismo, nos permite analizar una sola porción de la base de datos, visualizando de esa forma la información relevante que necesitamos.
A continuación, utilizaremos una tabla dinámica para agrupar los gastos pre-operativos para la apertura de un restaurante para lo cual introduciremos el siguiente código en Visual Basic:
Sub TablaDinamica()
Dim WSD1 As Worksheet
Dim WSD2 As Worksheet
Dim PTCache As PivotCache
Dim PT As PivotTable
Dim PRange As Range
Dim FinalRow As Long
Set WSD1 = Worksheets("Hoja2")
For Each PT In WSD1.PivotTables
PT.TableRange2.Clear
Next PT
Set WSD2 = Worksheets("Hoja1")
FinalRow = WSD2.Cells(Rows.Count, 1).End(xlUp).Row
Set PRange = WSD2.Cells(1, 1).Resize(FinalRow, 6)
Sheets("Hoja1").Select
Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=PRange.Address)
Set PT = PTCache.CreatePivotTable(TableDestination:=Worksheets("Hoja2").Range("A3"), TableName:="PivotTable")
PT.Format xlReport6
PT.ManualUpdate = True
PT.AddFields RowFields:=Array("Categoria")
With PT.PivotFields("Cantidad")
.Orientation = xlDataField
.Function = xlSum
.Position = 1
.NumberFormat = "#,##0"
.Name = "Cantidad_Fisica"
End With
With PT.PivotFields("Costo_ ")
.Orientation = xlDataField
.Function = xlSum
.Position = 2
.NumberFormat = "#,##0"
End With
With PT.PivotFields("Costo_ s/IGV")
.Orientation = xlDataField
.Function = xlSum
.Position = 3
.NumberFormat = "#,##0"
End With
With PT.PivotFields("Costo_Total")
.Orientation = xlDataField
.Function = xlSum
.Position = 4
.NumberFormat = "#,##0"
End With
PT.ManualUpdate = False
Sheets("Hoja2").Select
End Sub
Al introducir mencionado código obtenemos la siguiente tabla dinámica de la base de datos de gastos pre-operativos para la apertura de un restaurante separados por categoría de acondicionamiento, capacitación, decoración y uniformes:
(Para mayor visualización de la imagen, hacer click en la misma)
25/06/2013 a las 3:04 pm
With ActiveWorkbook.Worksheets("Inicio").Sort
.SetRange Range(" : ")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With