Excel Avanzado

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

Excel Avanzado

Tabla Dinámica en VBA para calcular la suma de ventas de una distribuidora

| 3 comentarios

DESCRIPCIÓN

En toda empresa siempre existe gran cantidad de almacenamiento de data y que es necesario ordenarla y organizarla para poder contabilizar el promedio, suma, de las ventas o utilidades.

Un ejemplo para realizar esta actividad son las tablas dinámicas en el cual podemos obtener una visualización mejor si es que necesitamos la suma de ventas anualmente y por zonas o por productos, etc.

En este caso, se presentará una data de información de una Empresa Distribuidora y se tratará de obtener a través de macros en VBA la suma de ventas por regiones.

PROCEDIMIENTO
1. Tenemos la siguiente data obtenida de una empresa DISTRIBUIDORA SA:

tabla dinámica ventas distribuidora 011

tabla dinámica ventas distribuidora 012

(Para mayor visualización de la imagen, hacer click en la misma)

2. Luego en el programador de Visual Basic ponemos los siguientes comandos:

Definimos las variables y las hojas para la tablas dinamicas:

Private Sub CommandButton1_Click()
' definir variables
Dim WSD1 As Worksheet
Dim WSD2 As Worksheet
Dim PTCache As PivotCache
Dim PT As PivotTable
Dim PRange As Range
Dim FinalRow As Long

'DEFINIR HOJA DE TABLA
Set WSD1 = Worksheets("Hoja2")

'Borrar contenido en dicha hoja
For Each PT In WSD1.PivotTables
PT.TableRange2.Clear
Next PT

'DEFINIR HOJA DE BASE DE DATOS
Set WSD2 = Worksheets("Distribuidora")
FinalRow = WSD2.Cells(Rows.Count, 2).End(xlUp).Row
'FinalRow = WSD2.Cells(65536, 1).End(xlUp).Row
Set PRange = WSD2.Cells(1, 1).Resize(FinalRow, 11)

'situarse en hoja base de datos y capturar rango de datos
Sheets("Distribuidora").Select
Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=PRange.Address)

'Creacion de tabla dinamica en blanco, especificando la ubicación de salida y nombre de la tabla
Set PT = PTCache.CreatePivotTable(TableDestination:=Worksheets("Hoja2").Range("B3"), TableName:="PivotTable2")
PT.Format xlReport6
'Actualizacion automatica
PT.ManualUpdate = True

'se establece rotulo de fila y columna
PT.AddFields RowFields:=Array("Trimestre")
PT.AddFields ColumnFields:=Array("Región")

'se establecen los campos de datos
With PT.PivotFields("Trimestre")
.Orientation = xlRowField
.Position = 1
.NumberFormat = "#,##0"
.Name = "trimest"
End With

With PT.PivotFields("Ventas")
.Orientation = xlDataField
.Function = xlSum
.Position = 1
.NumberFormat = "#,##0"
.Name = "Suma de Ventas"
End With

'se establece filtro de informe
With PT.PivotFields("Año")
.Orientation = xlPageField
.Position = 1
.Name = "Años"

End With

'Calcular la tabla dinamica
PT.ManualUpdate = False
'PT.ManualUpdate = True
Sheets("Hoja2").Select
End Sub

3. Entonces presionando F5 obtenemos la siguiente tabla dinámica:

tabla dinámica ventas distribuidora 02

En el cual se define la suma de ventas totales trimestrales por regiones (oeste, este, sur, norte).

4. Por último podemos obtener una gráfica de esta tabla dinamica para que se pueda visualizar mucha mejor:

tabla dinámica ventas distribuidora 03

(Para mayor visualización de la imagen, hacer click en la misma)

En conclusión, las tablas dinamicas para calcular la suma de ventas o promedio de ventas de una empresa o distribuidora por trimestre a través de macros es sencillo y lo único que hay considerar el orden de fila y columna que vas a empezar a ordenar tus datos.

Se adjunta el excel para mayor información:

Tabla dinamica en VBA para suma trimestral de Ventas de una Distribuidora

 

Autor: Juan Palomino

3 comentarios

  1. Como genero un campo calculado dentro de la macro? Ejemplo: C1=Oeste/Sur, mucho agradecere despejar mi interrogante.
    Saludos,
    Antonio

  2. que es el xlReport6?

  3. Que excelente ayuda que presentan todas sus aplicaciones a las personas que estamos tratando de aprender sobre las maravillas que pueden desarrollarse por medio de este maravilloso programa excel, que ustedes estan apoyando con sus instrucciones, muchas gracias por su apoyo.
    ATTE.
    GWEST

Deja una respuesta

Los campos requeridos estan marcados con *.