Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Ejemplo de Tabla Dinámica para Control de Costos

| 2 comentarios

La Tabla Dinámica propuesta puede ser utilizada por una empresa comercial de venta de ejes de acero, fierro y bronce en las medidas más comerciales. Mediante ella puede conocer el stock de sus productos y su valor a precio de costo.

Esta Tabla permite el registro de entrada en unidades de productos, su costo unitario y su valor a precio de entrada por tipo de  material de los ejes, así también registra las unidades de salida y el costo total de estas salidas y calcula en términos monetarios la diferencia entre la entradas y salidas y efectúa los totales parciales y generales.

Ejemplo de Tabla Dinámica para control de Costos

La Macro se ha procesado de la siguiente manera

Sub Crear_TablaDinamica()
Dim HTD1 As Worksheet
Dim HTD2 As Worksheet
Dim PTCache As PivotCache
Dim PT As PivotTable
Dim PRange As Range
Dim FinalRow As Long
'Se define la hoja de trabajo
Set HTD1 = Worksheets("RESUMEN")
'Borrar las tablas dinámicas que se encuentran en la hoja
For Each PT In HTD1.PivotTables
PT.TableRange2.Clear
Next PT

'Definir el área de entrada y establecer un caché dinámico
Set HTD2 = Worksheets("COSTOS")
FinalRow = HTD2.Cells(Rows.Count, 1).End(xlUp).Row
Set PRange = HTD2.Cells(1, 1).Resize(FinalRow, 10)

'Nos situamos en la hoja con los datos

Sheets("COSTOS").Select

  Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=PRange.Address)

  'Se crea una tabla dinámica en blanco, especificando la ubicación de salida y nombre de la tabla

  Set PT = PTCache.CreatePivotTable(TableDestination:=Worksheets("RESUMEN").Range("B3"), TableName:="PivotTable3")

  PT.Format xlReport3

'Actualizacion automatica

PT.ManualUpdate = True
PT.AddFields RowFields:=Array("PRODUCTO", "MATERIAL")

'Establecer los campos de datos

With PT.PivotFields("CANTIDAD INGRESADA (Kg.)")
.Orientation = xlDataField
.Function = xlSum
.Position = 1
.NumberFormat = "#,##0"
End With

With PT.PivotFields("COSTO DE ENTRADA (S/.)")
.Orientation = xlDataField
.Function = xlSum
.Position = 2
.NumberFormat = "#,##0"
End With

With PT.PivotFields("CANTIDAD DE SALIDA (kg.)")
.Orientation = xlDataField
.Function = xlSum
.Position = 3
.NumberFormat = "#,##0"
End With

With PT.PivotFields("COSTO DE SALIDA (S/.)")
.Orientation = xlDataField
.Function = xlSum
.Position = 4
.NumberFormat = "#,##0"
End With

With PT.PivotFields("ENTRADAS - SALIDAS (S/.)")
.Orientation = xlDataField
.Function = xlSum
.Position = 5
.NumberFormat = "#,##0"
End With

'Calcular la tabla dinámica
PT.ManualUpdate = False
'PT.ManualUpdate = True
Sheets("RESUMEN").Select

End Sub

Elaborado por: José Delgado

2 comentarios

  1. Excelente ejemplo de como manejar información a través de un formulario. Bastante didactico

    • excelente, solo me interesaria poder hacer lo siguiente, una vez que armo la planilla, poder volver a pegar el reporte en la planilla que alimenta los datos y que la tabla dinamica se regenere, en el ejemplo que tome yo de costos, dice crear una tabla dinamica nueva, y no se actualiza con los nuevos datos, justamente porque ya hay una nueva tabla una vez que ejecute el comando por primera vez. Como podría corregir el código para decirle que la tabla se modifique cada vez que oprimo el boton (cree un boton para que ejecute el código)?

      MIl graciias!!

Deja una respuesta

Los campos requeridos estan marcados con *.