You are on page 1of 7

4/24/2014 ENI Training - Libro online

http://www.eni-training.com/client_net/mediabook.aspx?idR=71535 1/7
Sub Calc_Premios()
Dim dblVNProm As Double
Dim celda As Range

Seleccin del rango llamado VN
ThisWorkbook.Names("VN").RefersToRange.Select
Clculo del promedio de la seleccin
dblVNProm = Evaluate("AVERAGE(VN)")
Recorre las celdas de la seleccin
La prima calculada se asigna a la celda de la derecha
For Each celda In Selection
Cells(celda.Row, celda.Column + 1) = _
Premio(celda.Value, dblVNProm)
Next celda
End Sub
Function Premio(dblVN As Double, dblVNProm As Double) As Double

Ejemplos de uso de los objetos
1. Clculo del importe de un premio
El rango de celdas "D6:D14" debe recibir el nombre VN.
Cuando el usuario hace clic en el botn de comando Calcular premios, se ejecutar el
procedimiento Calc_Premios. Este procedimiento selecciona el rango de celdas llamado VN (celdas
"D6:D14") y llama a la funcin Premio para calcular la prima y asignarla a la celda de la derecha.
La funcin Premio calcula el premio en funcin del VN (valor negociado) y del promedio de los otros VN.
4/24/2014 ENI Training - Libro online
http://www.eni-training.com/client_net/mediabook.aspx?idR=71535 2/7
Sub Mostrar_Comentarios()
Dim rng1 As Range
Dim rng2 As Range
Dim rngCurrent As Range
Dim col As Object
Dim i As Integer
Dim j As Integer
Premio en funcin del importe VN
Select Case dblVN
Case Is < 100000
Premio = 0
Case Is < 125000
Premio = 500
Case Is < 150000
Premio = 1000
Case Else
Premio = 2000
End Select

Si el VN es superior al promedio
premio extra de 1000
If dblVN > dblVNProm Then
Premio = Premio + 1000
End If

End Function
2. Asignar comentarios a las celdas
Cuando el usuario hace clic en el botn Comentarios, se ejecuta el
procedimientoMostrar_Comentarios. Este procedimiento llama al procedimiento Compara_Valor para
comparar cada una de las celdas seleccionadas con la celda situada a su izquierda.
4/24/2014 ENI Training - Libro online
http://www.eni-training.com/client_net/mediabook.aspx?idR=71535 3/7
Borra los comentarios y los estilos de la seleccin actual
Set rngCurrent = ThisWorkbook.Worksheets("Ventas").Range("C5:D16")
With rngCurrent
.ClearComments
.Font.Bold = False
.Font.Italic = False
.Borders.LineStyle = xlLineStyleNone
Recorre las columnas seleccionadas
Compara el valor de cada celda de la columna
con el de la celda situada a su izquierda
For i = 1 To .Columns.Count
Set col = .Columns(i)
For j = 1 To col.Cells.Count
Set rng1 = col.Cells(j)
Set rng2 = Cells(rng1.Row, rng1.Column - 1)
Compara_Valor rng1, rng2
Next j
Next i
End With

End Sub
Sub Compara_Valor(rng1 As Range, rng2 As Range)
Dim dbl1, dbl2, dbl3 As Double
Dim strEvol As String

Compara los valores de dos celdas y asigna un comentario
With rng1
dbl1 = rng2.Value
dbl2 = .Value
dbl3 = (dbl2 - dbl1) / dbl1
strEvol = Format(Abs(dbl3), "0.00 %")
Select Case dbl3
Case Is < 0
.Font.Bold = True
.AddComment "Atencin: por debajo de " & strEvol
Case Is < 0.2
.Font.Italic = True
.AddComment "Bien: por encima de " & strEvol
Case Else
.Borders.LineStyle = xlContinuous
.AddComment "Excelente: por encima de " & strEvol
End Select
End With

End Sub
Al llamar a la funcin Compara_Valor, recibe como argumentos las celdas que hay que comparar. En
funcin del porcentaje de evolucin (negativo, < 20%, > 20%), se asigna un comentario y un formato a
la primera celda.
3. Creacin de una tabla dinmica con mini grficos
El siguiente ejemplo permite:
Crear y personalizar una tabla dinmica usando las colecciones de
objetos PivotTables yPivotFields.
Aplicar un formato condicional tipo barra de datos, usando la coleccin de
4/24/2014 ENI Training - Libro online
http://www.eni-training.com/client_net/mediabook.aspx?idR=71535 4/7
Sub Tabla_dinamica()
Dim wSheet As Worksheet
Dim NbLineas As Integer
Dim i As Integer
Dim nRows As Integer

Selecciona el rango con nombre (origen de datos)
Application.Goto Reference:="Ventas_2012"
objetosFormatConditions.
Agregar minigrficos usando la coleccin de objetos SparklineGroups.
Aplicar un criterio para filtrar los datos segn el cliente, usando la coleccin de
objetosSlicerCaches.
La hoja de clculo, creada a travs de cdigo VBA, tendr el siguiente aspecto:
Para ejecutar este ejemplo, haga lo siguiente:
Cree un nuevo libro a partir de la plantilla Informe de ventas (escriba Informe de ventas en la
zona de bsqueda de plantillas en lnea para acceder a esta plantilla).
Grabe el libro como Informe de ventas.xlsm).
Asgnele el nombre Ventas_2012 al conjunto de celdas de la hoja "Datos de origen" (rango
A1:F278).
Inserte el siguiente cdigo en un nuevo mdulo.
Ejecute el cdigo.
4/24/2014 ENI Training - Libro online
http://www.eni-training.com/client_net/mediabook.aspx?idR=71535 5/7

Elimina la hoja TD_Productos, si existe
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "TD_Productos" Then
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
Exit For
End If
Next i

Crea la hoja TD_Productos
Set wSheet = Sheets.Add
wSheet.Name = "TD_Productos"

Inserta un grfico en la hoja creada
ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData := "VENTAS_2012", _
Version:=xlPivotTableVersion15).CreatePivotTable _
TableDestination:="TD_PRODUCTOS!R1C1", TableName:= _
"TDProductos", DefaultVersion:=xlPivotTableVersion15

Muestra la lista de campos de la tabla dinamica
ActiveWorkbook.ShowPivotTableFieldList = True

Inserta los campos Producto y los 4 Trimestres
With wSheet.PivotTables("TDProductos")

.PivotFields("Producto").Orientation = xlRowField
.PivotFields("Producto").Position = 1

4 campos Trimestre
For i = 1 To 4
.AddDataField ActiveSheet.PivotTables("TDProductos") _
.PivotFields("Tri " & i), "Trimestre " & i, xlSum
Next i

Campo total 2012
.AddDataField ActiveSheet.PivotTables("TDProductos") _
.PivotFields("Total"), "Total 2012", xlSum

End With

Aspecto de la tabla dinmica
With wSheet.PivotTables("TDProductos")

Estilo
.TableStyle2 = "PivotStyleLight16"

Ancho de las columnas
Columns("B:F").Select
Selection.ColumnWidth = 13

Ttulos
.CompactLayoutRowHeader = "Productos"
.DataPivotField.Caption = "Ventas"

Formato monetario para los valores
4/24/2014 ENI Training - Libro online
http://www.eni-training.com/client_net/mediabook.aspx?idR=71535 6/7
For i = 1 To 4
.PivotFields("Trimestre " & i).NumberFormat = "# ##0.00 "
Next i
.PivotFields("Total 2012").NumberFormat = "# ##0.00 "

End With

Cantidad de filas de la tabla
Range("B2").Select
Selection.End(xlDown).Select
NbLineas = ActiveCell.Row

Formato condicional
Barra de datos para la ltima columna
Range("F2:F" & NbLineas - 1).Select
Selection.FormatConditions.AddDatabar
With Selection.FormatConditions(1)
.BarColor.Color = 15698432
.BarColor.TintAndShade = 0
.BarFillType = xlDataBarFillGradient
.BarBorder.Type = xlDataBarBorderSolid
End With

Agrega un minigrfico de tipo lneas
Range("G2:G" & NbLineas).Select
Range("G2:G" & NbLineas).SparklineGroups.Add _
Type:=xlSparkLine, _
SourceData:="B3:E" & NbLineas
With Selection.SparklineGroups.Item(1)
.SeriesColor.ThemeColor = 5
.SeriesColor.TintAndShade = -0.5
.Points.Markers.Color.ThemeColor = 5
.Points.Markers.Color.TintAndShade = 0.5
.Points.Highpoint.Color.ThemeColor = 5
End With

Agrega un minigrfico tipo histograma
Range("H2:H" & NbLineas).Select
Range("H2:H" & NbLineas).SparklineGroups.Add _
Type:=xlSparkColumn, _
SourceData:="B2:E" & NbLineas
With Selection.SparklineGroups.Item(1)
.SeriesColor.ThemeColor = 5
.SeriesColor.TintAndShade = -0.5
.Points.Markers.Color.ThemeColor = 5
.Points.Markers.Color.TintAndShade = 0.5
.Points.Highpoint.Color.ThemeColor = 5
End With

Aade un sector en el campo Cliente
ActiveWorkbook.SlicerCaches.Add(wSheet.PivotTables("TDProductos"), _
"Cliente").Slicers.Add ActiveSheet, , "Cliente", "Cliente", _
200, 20, 100, 100
ActiveSheet.Shapes.Range(Array("Cliente")).Select
ActiveWorkbook.SlicerCaches("Sector_Cliente1").ClearManualFilter

Oculta la lista de campos de la tabla
ActiveWorkbook.ShowPivotTableFieldList = False

4/24/2014 ENI Training - Libro online
http://www.eni-training.com/client_net/mediabook.aspx?idR=71535 7/7
End Sub