Crear un gráfico en Excel 2003 vs Excel 2007

Estándar

Anteriormente en Excel 2003 se utilizaba el método “Charts.Add” para agregar un nuevo gráfico, y después, se especificaba los datos, tipo de gráfico y finalmente si se quería el gráfico en la hoja existente o en una nueva.
Si se va a crear una macro que correrá en versiones de Excel 2003, se debe emplear el siguiente código:


Charts.Add
ActiveChart.SetSourceData Source:=Sheets(“Sheet 1”).Range(“A1:E4”)
ActiveChart.ChartType=xlColumnClustered
ActiveChart.Location Where:=xlLocationAsObject, Name:=”Sheet 1”

Pero si solo se va a trabajar con 2007 en adelante, se puede emplear el siguiente codigo:


ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Sheets(“Sheet 1”).Range(“A1:E4”)
ActiveChart.ChartType=xlColumnClustered

Como se puede apreciar para 2007 en adelante se requiere menos código y es mas entendible. Se puede especificar el tamaño y posición del gráfico en el método “AddChart”.

Aquí la macro para que comparen ambos métodos.

Crear un gráfico pulsando un solo botón

Estándar

Las versiones previas a Excel 2007 permitían crear un gráfico seleccionando los datos y pulsando la tecla F11. Al hacer esto, Excel creaba un gráfico por defecto en una nueva hoja.

A partir de Excel 2007 se sigue reconociendo el mismo método y se añadió la combinación Alt+F1, que crea un gráfico por defecto como objeto gráfico incrustado en la hoja de cálculo actual. La combinación Alt+F1 ahorra tiempo cuando se quiere crear un gráfico que coincide con el de por defecto de Excel.

Cuando se instala Excel, el gráfico por defecto es el de columna 2D.

Creación de gráficos con VBA/Excel

Estándar

Crear gráficos personalizados puede ser una tarea práctica y sencilla si sabemos utilizar el objeto Chart y ChartObjetc, al igual que sus métodos y propiedades.

Inicialmente en Excel solo se podían crear hojas de gráficos (Chart), es decir un grafico se situaba en toda una hoja algo similar a lo que sucede cuando se presiona la tecla F11 sobre un listado de datos, inmediatamente se crea una hoja de grafico de los datos con el tipo de grafico por defecto. Después Excel incorporo la posibilidad de tener objetos de gráficos dentro de una hoja existente (ChartObject).

En este tutorial se muestra como crear un grafico, manipular el área de grafico, el área de trazado y las series de un objeto grafico (ChartObject), al igual que algunas de sus propiedades. También se verá cómo crear un grafico circular con un subgrafico de barras que agrupe porcentajes menores a un valor establecido y por último como exportar un grafico como una imagen.

La ventaja de crear gráficos y exportarlos como imagen es que podemos utilizar dichas imágenes exportadas para poderlas cargas en un formulario, poderlas visualizar en páginas web y otras posibilidades mas…


Option Explicit

‘Creacion de un grafico desde VBA
Sub Crear_Grafico()
Dim ws As Worksheet
Dim migrafico As ChartObject

Set ws = ActiveSheet
Charts.Add ‘Se crea una hoja de grafico

With ActiveChart ‘en la hoja de gafico activa…
.SetSourceData ws.Range(“A1”).CurrentRegion ‘establecer el origen de los datos a graficar
.Location xlLocationAsObject, ws.Name ‘mover a la hoja1, con lo cual pasa de objeto Chart a ChartObject
End With

Set migrafico = ws.ChartObjects(1) ‘se crea una referencia

With migrafico
.Width = 300 ‘ancho
.Height = 150 ‘alto
.Left = 180 ‘distancia con la parte izquierda de la hoja
.Top = 10 ‘distancia con la parte superior de la hoja
.Chart.Legend.Position = xlLegendPositionBottom ‘poner leyenda en la parte inferior del grafico
End With
End Sub

‘Modifica el area de grafico (ChartArea) del grafico activo
Sub Area_Grafico()
Dim ws As Worksheet
Dim grafico As Chart
Dim area As ChartArea

Set ws = ActiveSheet ‘hoja activa
Set grafico = ws.ChartObjects(1).Chart ‘grafico 1
Set area = grafico.ChartArea ‘area de grafico

With area
.Shadow = True
.Select
.Border.ColorIndex = 3
.Border.Weight = xlMedium
.Interior.ColorIndex = 34
.AutoScaleFont = False
.Font.Size = 14
End With
End Sub

‘Modifica el area de trazado (PlotArea) del grafico activo
Sub Area_Trazado()
Dim ws As Worksheet
Dim grafico As Chart
Dim trazado As PlotArea

Set ws = ActiveSheet
Set grafico = ws.ChartObjects(1).Chart
Set trazado = grafico.PlotArea

With trazado
.Top = 20
.Left = 35
.Height = 100
.Width = 200
End With
End Sub

‘Modificar las series del grafico
Sub Series()
Dim ws As Worksheet
Dim grafico As Chart
Dim serie As Series

Set ws = ActiveSheet
Set grafico = ws.ChartObjects(1).Chart
Set serie = grafico.SeriesCollection(“Xdata”)

With serie
.ChartType = xlLine
.Border.Weight = xlThick
.MarkerStyle = xlMarkerStyleCircle
.MarkerBackgroundColorIndex = xlColorIndexAutomatic
.MarkerForegroundColorIndex = xlColorIndexAutomatic
.MarkerSize = 10
End With
End Sub

‘Crea un grafico circular con subgrafico de barras (agrupa todos los porcentajes < 5%)
Sub Grafico_Circular()
Dim ws As Worksheet
Dim rng As Range
Dim grafico As Chart
Dim grupo As ChartGroup

Set ws = ThisWorkbook.Sheets(“Hoja2”)
Set rng = ws.Range(“A1”).CurrentRegion
Set grafico = Charts.Add

With grafico
.ChartType = xlBarOfPie ‘tipode grafico
.SetSourceData rng ‘fuente de datos
.ApplyDataLabels xlDataLabelsShowPercent ‘mostrar etiquetas de porcentaje

Set grupo = .ChartGroups(1)

With grupo
.SplitType = xlSplitByPercentValue
.SplitValue = 5 ‘menor que 5% combinado
.GapWidth = 200 ‘espacio entre el grafico circular y las barras
.SecondPlotSize = 55 ‘% relativo al tamaño del circulo
End With

.Location xlLocationAsObject, ws.Name ‘establecer como objeto de grafico
End With
End Sub

‘Exportar un grafico como imagen
Sub Exporta_Grafico()
Dim ws As Worksheet
Dim grafico As Chart

Set ws = ThisWorkbook.Sheets(“Hoja2”)
Set grafico = ws.ChartObjects(1).Chart
grafico.Export “C:\grafico.gif”, filtername:=”GIF” ‘se exporta el grafico a la unidad C como imagen gif
End Sub

Aqui se puede ver la aplicacion del codigo anterior: Graficos

Aqui anexo un video: Video Explicativo