Guía definitiva: VBA para cuadros y gráficos en Excel (más de 100 ejemplos)

Índice
  1. Adaptando el código a sus necesidades
    1. Comprender el modelo de objetos del documento
    2. Objetos de gráficos frente a gráficos frente a hojas de gráficos
    3. Escribir código para trabajar en cualquier tipo de gráfico
  2. Ejemplos de código VBA
    1. Insertar gráficos
    2. Cuadros de referencia en una hoja de trabajo.
    3. Hojas de gráficos de referencia
    4. Configuración básica del gráfico
    5. Eje del gráfico
    6. Líneas de cuadrícula
    7. Titulo del gráfico
    8. Leyenda del gráfico
    9. Área de parcela
    10. Serie de gráficos
    11. Etiquetas de datos
    12. Barras de error
    13. Puntos de datos
  3. Otras macros de gráficos útiles
    1. Hacer que el gráfico cubra el rango de celdas
    2. Exportar el gráfico como una imagen
    3. Cambiar el tamaño de todos los gráficos al mismo tamaño que el gráfico activo
  4. Reuniéndolo todo
  5. Uso de Macro Recorder para VBA para cuadros y gráficos
  6. Conclusión

Los cuadros y gráficos son una de las mejores características de Excel; son muy flexibles y se pueden utilizar para realizar visualizaciones muy avanzadas. Sin embargo, esta flexibilidad significa que hay cientos de opciones diferentes. Podemos crear exactamente la visualización que queremos, pero su aplicación puede llevar mucho tiempo. Cuando queremos aplicar esos cientos de configuraciones a muchos gráficos, puede llevar horas y horas. de clics frustrantes. Esta publicación es una guía para usar VBA para cuadros y gráficos en Excel.

Tabla de contenido
  • Adaptando el código a sus necesidades
    • Comprender el modelo de objetos del documento
    • Objetos de gráficos frente a gráficos frente a hojas de gráficos
    • Escribir código para trabajar en cualquier tipo de gráfico
  • Ejemplos de código VBA
    • Insertar gráficos
    • Cuadros de referencia en una hoja de trabajo.
    • Hojas de gráficos de referencia
    • Configuración básica del gráfico
    • Eje del gráfico
    • Líneas de cuadrícula
    • Titulo del gráfico
    • Leyenda del gráfico
    • Área de parcela
    • Serie de gráficos
    • Etiquetas de datos
    • Barras de error
    • Puntos de datos
  • Otras macros de gráficos útiles
    • Hacer que el gráfico cubra el rango de celdas
    • Exportar el gráfico como una imagen
    • Cambiar el tamaño de todos los gráficos al mismo tamaño que el gráfico activo
  • Reuniéndolo todo
  • Uso de Macro Recorder para VBA para cuadros y gráficos
  • Conclusión

Los ejemplos de código siguientes demuestran algunas de las opciones de gráficos más comunes con VBA. Con suerte, podrá darles un buen uso y automatizar la creación y modificación de sus gráficos.

Si bien puede resultar tentador pasar directamente a la sección que necesita, le recomiendo que lea la primera sección en su totalidad. Comprender el modelo de objetos de documento (DOM) es esencial para comprender cómo se puede utilizar VBA con cuadros y gráficos en Excel.

En Excel 2013, se introdujeron muchos cambios en el motor de gráficos y en el modelo de objetos de documento. Por ejemplo, el método AddChart2 reemplazó al método AddChart. Como resultado, es posible que parte del código presentado en esta publicación no funcione con versiones anteriores a Excel 2013.

Adaptando el código a sus necesidades

No es factible proporcionar código para cada escenario con el que te puedas encontrar; hay demasiados, pero, al aplicar los principios y métodos de esta publicación, podrá hacer casi cualquier cosa que desee con gráficos en Excel usando VBA.

Comprender el modelo de objetos del documento

El modelo de objetos de documento (DOM) es un término que describe cómo se estructuran las cosas en Excel. Por ejemplo:

  • Un libro de trabajo contiene hojas
  • Una hoja contiene rangos
  • Una gama contiene un interior
  • Un interior contiene una configuración de color.

Por lo tanto, para cambiar el color de una celda a rojo, haríamos referencia a esto de la siguiente manera:

ActiveWorkbook.Sheets("Sheet1").Range("A1").Interior.Color = RGB(255, 0, 0)

Los gráficos también son parte del DOM y siguen principios jerárquicos similares. Para cambiar la altura del Gráfico 1, en la Hoja 1, podríamos usar lo siguiente.

ActiveWorkbook.Sheets("Sheet1").ChartObjects("Chart 1").Height = 300

Cada elemento de la jerarquía de objetos debe enumerarse y separarse por un punto ( . ).

Conocer el modelo de objetos del documento es la clave del éxito con los gráficos VBA. Por tanto, necesitamos conocer el orden correcto dentro del modelo de objetos. Si bien el siguiente código puede parecer aceptable, no funcionará.

ActiveWorkbook.ChartObjects("Chart 1").Height = 300

En el DOM, ActiveWorkbook no contiene ChartObjects, por lo que Excel no puede encontrar el Gráfico 1. El padre de un ChartObject es una hoja y el padre de una hoja es un libro de trabajo. Debemos incluir la hoja en la jerarquía para que Excel sepa qué quieres hacer.

ActiveWorkbook.Sheets("Sheet1").ChartObjects("Chart 1").Height = 300

Con este conocimiento, podemos hacer referencia a cualquier elemento de cualquier gráfico utilizando el DOM de Excel.

Objetos de gráficos frente a gráficos frente a hojas de gráficos

Una de las cosas que complica el DOM para los gráficos es que existen muchas cosas en muchos lugares. Por ejemplo, un gráfico puede ser un gráfico incrustado en el frente de una hoja de trabajo o como una hoja de gráfico separada.

  • En la propia hoja de trabajo, encontramos ChartObjects. Dentro de cada ChartObject hay un Chart. Efectivamente, un ChartObject es un contenedor que contiene un Chart.
  • Un gráfico también es una hoja independiente que no tiene un ChartObject a su alrededor.

Esto puede parecer confuso al principio, pero hay buenas razones para ello.

Para cambiar el texto del título del gráfico, haríamos referencia a los dos tipos de gráfico de manera diferente:

  • Gráfico en una hoja de trabajo:
    Hojas(“Hoja1”).ChartObjects(“Gráfico 1”).Chart .ChartTitle.Text = “Título de mi gráfico”
  • Hoja de gráfico:
    Hojas (“Gráfico 1”). ChartTitle.Text = "Título de mi gráfico"

Las secciones en negrita son exactamente iguales. Esto muestra que una vez que hemos entrado en el Gráfico, el DOM es el mismo.

Escribir código para trabajar en cualquier tipo de gráfico

Queremos escribir código que funcione en cualquier gráfico; Hacemos esto creando una variable que contiene la referencia a un gráfico.

Cree una variable para hacer referencia a un gráfico dentro de un ChartObject:

Dim cht As ChartSet cht = Sheets("Sheet1").ChartObjects("Chart 1").Chart

Cree una variable para hacer referencia a un gráfico que es una hoja:

Dim cht As ChartSet cht = Sheets("Chart 1")

Ahora podemos escribir código VBA para una hoja de gráfico o un gráfico dentro de un ChartObject haciendo referencia al gráfico usando cht:

cht.ChartTitle.Text = "My Chart Title"

Bien, ahora hemos establecido cómo hacer referencia a los gráficos y hemos cubierto brevemente cómo funciona el DOM. Es hora de ver muchos ejemplos de código.

Ejemplos de código VBA

Insertar gráficos

En esta primera sección, creamos gráficos. Tenga en cuenta que algunas de las líneas de código individuales se incluyen a continuación en sus secciones relevantes.

Crear un gráfico a partir de un gráfico en blanco

Sub CreateChart()'Declare variablesDim rng As RangeDim cht As Object'Create a blank chart  Set cht = ActiveSheet.Shapes.AddChart2'Declare the data range for the chart  Set rng = ActiveSheet.Range("A2:B9")'Add the data to the chart  cht.Chart.SetSourceData Source:=rng'Set the chart type  cht.Chart.ChartType = xlColumnClusteredEnd Sub

Cuadros de referencia en una hoja de trabajo.

En esta sección, analizamos los métodos utilizados para hacer referencia a un gráfico contenido en una hoja de trabajo.

Gráfico activo

Cree una variable de gráfico para contener ActiveChart:

Dim cht As ChartSet cht = ActiveChart

Objeto de gráfico por nombre

Cree una variable de gráfico para contener un gráfico específico por nombre.

Dim cht As ChartSet cht = Sheets("Sheet1").ChartObjects("Chart 1").Chart

Objeto gráfico por número

Si hay varios gráficos en una hoja de trabajo, se puede hacer referencia a ellos por su número:

  • 1 = el primer gráfico creado
  • 2 = el segundo gráfico creado
  • etcétera etcétera.
Dim cht As ChartSet cht = Sheets("Sheet1").ChartObjects(1).Chart

Recorrer todos los objetos del gráfico

Si hay varios ChartObjects en una hoja de trabajo, podemos recorrer cada uno de ellos:

Dim chtObj As ChartObjectFor Each chtObj In Sheets("Sheet1").ChartObjects    'Include the code to be applied to each ChartObjects    'refer to the Chart using chtObj.cht.Next chtObj

Recorre todos los objetos de gráfico seleccionados

Si solo queremos recorrer los ChartObjects seleccionados, podemos usar el siguiente código.

Este código es complicado de aplicar ya que Excel funciona de manera diferente cuando se selecciona un gráfico, en comparación con varios gráficos. Por lo tanto, como forma de aplicar la configuración del gráfico, sin la necesidad de repetir mucho código, recomiendo llamar a otra macro y pasar el Gráfico como argumento para esa macro.

Dim obj As Object'Check if any charts have been selectedIf Not ActiveChart Is Nothing Then    Call AnotherMacro(ActiveChart)Else    For Each obj In Selection    'If more than one chart selected    If TypeName(obj) = "ChartObject" Then        Call AnotherMacro(obj.Chart)    End IfNextEnd If

Hojas de gráficos de referencia

Ahora pasemos a ver los métodos utilizados para hacer referencia a una hoja de gráfico independiente.

Gráfico activo

Configure una variable de gráfico para contener ActiveChart:

Dim cht As ChartSet cht = ActiveChart

Nota: este es el mismo código que cuando se hace referencia al gráfico activo en la hoja de trabajo.

Hoja de gráfico por nombre

Configurar una variable de gráfico para contener una hoja de gráfico específica

Dim cht As Chart Set cht = Sheets("Chart 1")

Recorrer todas las hojas de gráficos de un libro de trabajo

El siguiente código recorrerá todas las hojas de gráficos del libro activo.

Dim cht As ChartFor Each cht In ActiveWorkbook.Charts    Call AnotherMacro(cht)Next cht

Configuración básica del gráfico

Esta sección contiene configuraciones básicas de gráficos.

Todos los códigos comienzan con cht. , ya que suponen que se ha hecho referencia a un gráfico utilizando los códigos anteriores.

Cambiar tipo de gráfico

'Change chart type - these are common examples, others do exist.cht.ChartType = xlAreacht.ChartType = xlLinecht.ChartType = xlPiecht.ChartType = xlColumnClusteredcht.ChartType = xlColumnStackedcht.ChartType = xlColumnStacked100cht.ChartType = xlAreacht.ChartType = xlAreaStackedcht.ChartType = xlBarClusteredcht.ChartType = xlBarStackedcht.ChartType = xlBarStacked100

Cree un ChartObject vacío en una hoja de trabajo

'Create an empty chart embedded on a worksheet.Set cht = Sheets("Sheet1").Shapes.AddChart2.Chart

Seleccione la fuente de un gráfico

'Select source for a chartDim rng As RangeSet rng = Sheets("Sheet1").Range("A1:B4")cht.SetSourceData Source:=rng

Eliminar un objeto de gráfico o una hoja de gráfico

'Delete a ChartObject or Chart sheetIf TypeName(cht.Parent) = "ChartObject" Then    cht.Parent.DeleteElseIf TypeName(cht.Parent) = "Workbook" Then    cht.DeleteEnd If

Cambiar el tamaño o la posición de un gráfico

'Set the size/position of a ChartObject - method 1cht.Parent.Height = 200cht.Parent.Width = 300cht.Parent.Left = 20cht.Parent.Top = 20'Set the size/position of a ChartObject - method 2chtObj.Height = 200chtObj.Width = 300chtObj.Left = 20chtObj.Top = 20

Cambiar la configuración de las celdas visibles

'Change the setting to show only visible cellscht.PlotVisibleOnly = False

Cambiar el espacio entre columnas/barras (ancho del espacio)

'Change the gap space between barscht.ChartGroups(1).GapWidth = 50

Cambiar la superposición de columnas/barras

'Change the overlap setting of barscht.ChartGroups(1).Overlap = 75

Eliminar el borde exterior del objeto del gráfico

'Remove the outside border from a chartcht.ChartArea.Format.Line.Visible = msoFalse

Cambiar el color del fondo del gráfico

'Set the fill color of the chart areacht.ChartArea.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)'Set chart with no background colorcht.ChartArea.Format.Fill.Visible = msoFalse

Eje del gráfico

Los gráficos tienen cuatro ejes:

  • xlValor
  • xlValor, xlSecundario
  • xlCategoría
  • xlCategoría, xlSecundario

Estos se utilizan indistintamente en los ejemplos siguientes. Para adaptar el código a sus requisitos específicos, debe cambiar el eje del gráfico al que se hace referencia entre paréntesis.

Todos los códigos comienzan con cht. , ya que suponen que se ha hecho referencia a un gráfico utilizando los códigos anteriores en esta publicación.

Establecer mínimo y máximo del eje del gráfico

'Set chart axis min and maxcht.Axes(xlValue).MaximumScale = 25cht.Axes(xlValue).MinimumScale = 10cht.Axes(xlValue).MaximumScaleIsAuto = Truecht.Axes(xlValue).MinimumScaleIsAuto = True

Mostrar u ocultar el eje del gráfico

'Display axischt.HasAxis(xlCategory) = True'Hide axischt.HasAxis(xlValue, xlSecondary) = False

Mostrar u ocultar el título del gráfico

'Display axis titlecht.Axes(xlCategory, xlSecondary).HasTitle = True'Hide axis titlecht.Axes(xlValue).HasTitle = False

Cambiar el texto del título del eje del gráfico

'Change axis title textcht.Axes(xlCategory).AxisTitle.Text = "My Axis Title"

Invertir el orden de un eje de categorías

'Reverse the order of a catetory axischt.Axes(xlCategory).ReversePlotOrder = True'Set category axis to default ordercht.Axes(xlCategory).ReversePlotOrder = False

Líneas de cuadrícula

Las líneas de cuadrícula ayudan al usuario a ver la posición relativa de un elemento en comparación con el eje.

Agregar o eliminar líneas de cuadrícula

'Add gridlinescht.SetElement (msoElementPrimaryValueGridLinesMajor)cht.SetElement (msoElementPrimaryCategoryGridLinesMajor)cht.SetElement (msoElementPrimaryValueGridLinesMinorMajor)cht.SetElement (msoElementPrimaryCategoryGridLinesMinorMajor)'Delete gridlinescht.Axes(xlValue).MajorGridlines.Deletecht.Axes(xlValue).MinorGridlines.Deletecht.Axes(xlCategory).MajorGridlines.Deletecht.Axes(xlCategory).MinorGridlines.Delete

Cambiar el color de las líneas de cuadrícula

'Change colour of gridlinescht.Axes(xlValue).MajorGridlines.Format.Line.ForeColor.RGB = RGB(255, 0, 0)

Cambiar la transparencia de las líneas de cuadrícula

'Change transparency of gridlinescht.Axes(xlValue).MajorGridlines.Format.Line.Transparency = 0.5

Titulo del gráfico

El título del gráfico es el texto en la parte superior del gráfico.

Todos los códigos comienzan con cht. , ya que suponen que se ha hecho referencia a un gráfico utilizando los códigos anteriores en esta publicación.

Mostrar u ocultar el título del gráfico

'Display chart titlecht.HasTitle = True'Hide chart titlecht.HasTitle = False

Cambiar el texto del título del gráfico

'Change chart title textcht.ChartTitle.Text = "My Chart Title"

Colocar el título del gráfico

'Position the chart titlecht.ChartTitle.Left = 10cht.ChartTitle.Top = 10

Dar formato al título del gráfico

'Format the chart titlecht.ChartTitle.TextFrame2.TextRange.Font.Name = "Calibri"cht.ChartTitle.TextFrame2.TextRange.Font.Size = 16cht.ChartTitle.TextFrame2.TextRange.Font.Bold = msoTruecht.ChartTitle.TextFrame2.TextRange.Font.Bold = msoFalsecht.ChartTitle.TextFrame2.TextRange.Font.Italic = msoTruecht.ChartTitle.TextFrame2.TextRange.Font.Italic = msoFalse

Leyenda del gráfico

La leyenda del gráfico proporciona una clave de color para identificar cada serie del gráfico.

Mostrar u ocultar la leyenda del gráfico

'Display the legendcht.HasLegend = True'Hide the legendcht.HasLegend = False

Colocar la leyenda

'Position the legendcht.Legend.Position = xlLegendPositionTopcht.Legend.Position = xlLegendPositionRightcht.Legend.Position = xlLegendPositionLeftcht.Legend.Position = xlLegendPositionCornercht.Legend.Position = xlLegendPositionBottom'Allow legend to overlap the chart.'False = allow overlap, True = due not overlapcht.Legend.IncludeInLayout = Falsecht.Legend.IncludeInLayout = True'Move legend to a specific pointcht.Legend.Left = 20cht.Legend.Top = 200cht.Legend.Width = 100cht.Legend.Height = 25

Área de parcela

El área de trazado es el cuerpo principal del gráfico que contiene líneas, barras, áreas, burbujas, etc.

Todos los códigos comienzan con cht. , ya que suponen que se ha hecho referencia a un gráfico utilizando los códigos anteriores en esta publicación.

Color de fondo del área de trazado

'Set background color of the plot areacht.PlotArea.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)'Set plot area to no background colorcht.PlotArea.Format.Fill.Visible = msoFalse

Establecer la posición del área de trazado

'Set the size and position of the PlotArea. Top and Left are relative to the Chart Area.cht.PlotArea.Left = 20cht.PlotArea.Top = 20cht.PlotArea.Width = 200cht.PlotArea.Height = 150

Serie de gráficos

Las series de gráficos son las líneas, barras y áreas individuales de cada categoría.

Todos los códigos que comienzan con srs . suponga que la serie de un gráfico ha sido asignada a una variable.

Agregar una nueva serie de gráficos

'Add a new chart seriesSet srs = cht.SeriesCollection.NewSeriessrs.Values = "=Sheet1!$C$2:$C$6"srs.Name = "=""New Series"""'Set the values for the X axis when using XY Scattersrs.XValues = "=Sheet1!$D$2:$D$6"

Hacer referencia a una serie de gráficos

Configure una variable de Serie para contener una serie de gráficos:

  • 1 = Primera serie de gráficos
  • 2 = Segunda serie de gráficos
  • etcétera etcétera.
Dim srs As SeriesSet srs = cht.SeriesCollection(1)

Hacer referencia a una serie de gráficos por nombre

Dim srs As SeriesSet srs = cht.SeriesCollection("Series Name")

Eliminar una serie de gráficos

'Delete chart seriessrs.Delete

Recorre cada serie de gráficos

Dim srs As SeriesFor Each srs In cht.SeriesCollection    'Do something to each series    'See the codes below starting with "srs."Next srs

Cambiar datos de serie

'Change series source data and namesrs.Values = "=Sheet1!$C$2:$C$6"srs.Name = "=""Change Series Name"""

Cambiar colores de relleno o línea

'Change fill coloursrs.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)'Change line coloursrs.Format.Line.ForeColor.RGB = RGB(255, 0, 0)

Cambiando la visibilidad

'Change visibility of linesrs.Format.Line.Visible = msoTrue

Cambiar el grosor de la línea

'Change line weightsrs.Format.Line.Weight = 10

Cambiar estilo de línea

'Change line stylesrs.Format.Line.DashStyle = msoLineDashsrs.Format.Line.DashStyle = msoLineSolidsrs.Format.Line.DashStyle = msoLineSysDotsrs.Format.Line.DashStyle = msoLineSysDashsrs.Format.Line.DashStyle = msoLineDashDotsrs.Format.Line.DashStyle = msoLineLongDashsrs.Format.Line.DashStyle = msoLineLongDashDotsrs.Format.Line.DashStyle = msoLineLongDashDotDot

Marcadores de formato

'Changer marker typesrs.MarkerStyle = xlMarkerStyleAutomaticsrs.MarkerStyle = xlMarkerStyleCirclesrs.MarkerStyle = xlMarkerStyleDashsrs.MarkerStyle = xlMarkerStyleDiamondsrs.MarkerStyle = xlMarkerStyleDotsrs.MarkerStyle = xlMarkerStyleNone'Change marker border colorsrs.MarkerForegroundColor = RGB(255, 0, 0)'Change marker fill colorsrs.MarkerBackgroundColor = RGB(255, 0, 0)'Change marker sizesrs.MarkerSize = 8

Etiquetas de datos

Las etiquetas de datos muestran información adicional (como el valor o el nombre de la serie) sobre un punto de datos en una serie de gráficos.

Todos los códigos que comienzan con srs . suponga que la serie de un gráfico ha sido asignada a una variable.

Mostrar u ocultar etiquetas de datos

'Display data labels on all points in the seriessrs.HasDataLabels = True'Hide data labels on all points in the seriessrs.HasDataLabels = False

Cambiar la posición de las etiquetas de datos

'Position data labels'The label position must be a valid option for the chart type.srs.DataLabels.Position = xlLabelPositionAbovesrs.DataLabels.Position = xlLabelPositionBelowsrs.DataLabels.Position = xlLabelPositionLeftsrs.DataLabels.Position = xlLabelPositionRightsrs.DataLabels.Position = xlLabelPositionCentersrs.DataLabels.Position = xlLabelPositionInsideEndsrs.DataLabels.Position = xlLabelPositionInsideBasesrs.DataLabels.Position = xlLabelPositionOutsideEnd

Barras de error

Originalmente, las barras de error estaban destinadas a mostrar la variación (por ejemplo, valores mínimos y máximos) en un valor. Sin embargo, también se utilizan habitualmente en técnicas de gráficos avanzadas para crear elementos visuales adicionales.

Todos los códigos que comienzan con srs . suponga que la serie de un gráfico ha sido asignada a una variable.

Activar/desactivar las barras de error

'Turn error bars on/offsrs.HasErrorBars = Truesrs.HasErrorBars = False

Estilo de tapa del extremo de la barra de error

'Change end style of error barsrs.ErrorBars.EndStyle = xlNoCapsrs.ErrorBars.EndStyle = xlCap

Color de la barra de errores

'Change color of error barssrs.ErrorBars.Format.Line.ForeColor.RGB = RGB(255, 0, 0)

Grosor de la barra de error

'Change thickness of error barssrs.ErrorBars.Format.Line.Weight = 5

Configuración de dirección de la barra de error

'Error bar settingssrs.ErrorBar Direction:=xlY, _    Include:=xlPlusValues, _    Type:=xlFixedValue, _    Amount:=100'Alternatives options for the error bar settings are'Direction:=xlX'Include:=xlMinusValues'Include:=xlPlusValues'Include:=xlBoth'Type:=xlFixedValue'Type:=xlPercent'Type:=xlStDev'Type:=xlStError'Type:=xlCustom'Applying custom values to error barssrs.ErrorBar Direction:=xlY, _    Include:=xlPlusValues, _    Type:=xlCustom, _    Amount:="=Sheet1!$A$2:$A$7", _    MinusValues:="=Sheet1!$A$2:$A$7"

Puntos de datos

Cada punto de datos en una serie de gráficos se conoce como Punto.

Hacer referencia a un punto específico

El siguiente código hará referencia al primer punto.

1 = Primera serie de gráficos
2 = Segunda serie de gráficos
, etc., etc.

Dim srs As Series Dim pnt As PointSet srs = cht.SeriesCollection(1)Set pnt = srs.Points(1)

Recorre todos los puntos

Dim srs As Series Dim pnt As PointSet srs = cht.SeriesCollection(1)For Each pnt In srs.Points    'Do something to each point, using "pnt."Next pnt

Códigos VBA de ejemplo de puntos

Los puntos tienen propiedades similares a las Series, pero las propiedades se aplican a un único punto de datos de la serie en lugar de a toda la serie. Vea algunos ejemplos a continuación, solo para darle una idea.

Activar etiqueta de datos para un punto

'Turn on data label pnt.HasDataLabel = True

Establecer la posición de la etiqueta de datos para un punto

'Set the position of a data labelpnt.DataLabel.Position = xlLabelPositionCenter

Otras macros de gráficos útiles

En esta sección, he incluido otras macros de gráficos útiles que no están cubiertas por los códigos de ejemplo anteriores.

Hacer que el gráfico cubra el rango de celdas

El siguiente código cambia la ubicación y el tamaño del gráfico activo para que se ajuste directamente al rango G4:N20

Sub FitChartToRange()'Declare variablesDim cht As ChartDim rng As Range'Assign objects to variablesSet cht = ActiveChartSet rng = ActiveSheet.Range("G4:N20")'Move and resize chartcht.Parent.Left = rng.Leftcht.Parent.Top = rng.Topcht.Parent.Width = rng.Widthcht.Parent.Height = rng.HeightEnd Sub

Exportar el gráfico como una imagen

El siguiente código guarda el gráfico activo en una imagen en la ubicación predefinida

Sub ExportSingleChartAsImage()'Create a variable to hold the path and name of imageDim imagePath As StringDim cht As ChartimagePath = "C:UsersmarksDocumentsmyImage.webp"Set cht = ActiveChart'Export the chartcht.Export (imagePath)End Sub

Cambiar el tamaño de todos los gráficos al mismo tamaño que el gráfico activo

El siguiente código cambia el tamaño de todos los gráficos en la hoja activa para que tengan el mismo tamaño que el gráfico activo.

Sub ResizeAllCharts()'Create variables to hold chart dimensionsDim chtHeight As LongDim chtWidth As Long'Create variable to loop through chart objectsDim chtObj As ChartObject'Get the size of the first selected chartchtHeight = ActiveChart.Parent.HeightchtWidth = ActiveChart.Parent.WidthFor Each chtObj In ActiveSheet.ChartObjects    chtObj.Height = chtHeight    chtObj.Width = chtWidthNext chtObjEnd Sub

Reuniéndolo todo

Solo para demostrar cómo podemos usar estos fragmentos de código, he creado una macro para crear gráficos con viñetas.

Esta no es necesariamente la forma más eficiente de escribir el código, pero sirve para demostrar que al comprender el código anterior podemos crear muchos gráficos.

Los datos se ven así:

Datos del gráfico de viñetas

El gráfico se ve así:

Gráfico de viñetas completado

El código que logra esto es el siguiente:

Sub CreateBulletChart()Dim cht As ChartDim srs As SeriesDim rng As Range'Create an empty chartSet cht = Sheets("Sheet3").Shapes.AddChart2.Chart'Change chart title textcht.ChartTitle.Text = "Bullet Chart with VBA"'Hide the legendcht.HasLegend = False'Change chart typecht.ChartType = xlBarClustered'Select source for a chartSet rng = Sheets("Sheet3").Range("A1:D4")cht.SetSourceData Source:=rng'Reverse the order of a catetory axischt.Axes(xlCategory).ReversePlotOrder = True'Change the overlap setting of barscht.ChartGroups(1).Overlap = 100'Change the gap space between barscht.ChartGroups(1).GapWidth = 50'Change fill colourSet srs = cht.SeriesCollection(1)srs.Format.Fill.ForeColor.RGB = RGB(200, 200, 200)Set srs = cht.SeriesCollection(2)srs.Format.Fill.ForeColor.RGB = RGB(150, 150, 150)Set srs = cht.SeriesCollection(3)srs.Format.Fill.ForeColor.RGB = RGB(100, 100, 100)'Add a new chart seriesSet srs = cht.SeriesCollection.NewSeriessrs.Values = "=Sheet3!$B$7:$D$7"srs.XValues = "=Sheet3!$B$5:$D$5"srs.Name = "=""Actual"""'Change chart typesrs.ChartType = xlXYScatter'Turn error bars on/offsrs.HasErrorBars = True'Change end style of error barsrs.ErrorBars.EndStyle = xlNoCap'Set the error barssrs.ErrorBar Direction:=xlY, _    Include:=xlNone, _    Type:=xlErrorBarTypeCustomsrs.ErrorBar Direction:=xlX, _    Include:=xlMinusValues, _    Type:=xlPercent, _    Amount:=100'Change color of error barssrs.ErrorBars.Format.Line.ForeColor.RGB = RGB(0, 0, 0)'Change thickness of error barssrs.ErrorBars.Format.Line.Weight = 14'Change marker typesrs.MarkerStyle = xlMarkerStyleNone'Add a new chart seriesSet srs = cht.SeriesCollection.NewSeriessrs.Values = "=Sheet3!$B$7:$D$7"srs.XValues = "=Sheet3!$B$6:$D$6"srs.Name = "=""Target"""'Change chart typesrs.ChartType = xlXYScatter'Turn error bars on/offsrs.HasErrorBars = True'Change end style of error barsrs.ErrorBars.EndStyle = xlNoCapsrs.ErrorBar Direction:=xlX, _    Include:=xlNone, _    Type:=xlErrorBarTypeCustomsrs.ErrorBar Direction:=xlY, _    Include:=xlBoth, _    Type:=xlFixedValue, _    Amount:=0.45'Change color of error barssrs.ErrorBars.Format.Line.ForeColor.RGB = RGB(255, 0, 0)'Change thickness of error barssrs.ErrorBars.Format.Line.Weight = 2'Changer marker typesrs.MarkerStyle = xlMarkerStyleNone'Set chart axis min and maxcht.Axes(xlValue, xlSecondary).MaximumScale = cht.SeriesCollection(1).Points.Countcht.Axes(xlValue, xlSecondary).MinimumScale = 0'Hide axischt.HasAxis(xlValue, xlSecondary) = FalseEnd Sub

Uso de Macro Recorder para VBA para cuadros y gráficos

Macro Recorder es una de las herramientas más útiles para escribir gráficos VBA para Excel. El DOM es tan amplio que puede resultar complicado saber cómo hacer referencia a un objeto, propiedad o método específico. Estudiar el código producido por Macro Recorder proporcione las partes del DOM que no conoce.

Como nota, Macro Recorder crea código mal construido; selecciona cada objeto antes de manipularlo (después de todo, esto es lo que hacías con el mouse). Pero esto está bien para nosotros. Una vez que entendemos el DOM, podemos tomar solo las partes del código que necesitamos y asegurarnos de colocarlas en la parte derecha de la jerarquía.

Conclusión

Como ha visto en esta publicación, el modelo de objetos de documento para cuadros y gráficos en Excel es amplio (y solo hemos arañado la superficie).

Espero que a través de todos los ejemplos de esta publicación comprenda mejor VBA para cuadros y gráficos en Excel. Con este conocimiento, estoy seguro de que podrá automatizar la creación y modificación de sus gráficos.

¿Me he perdido algún código útil? Si es así déjalos en los comentarios.

¿Busca otras guías detalladas de VBA? Mira estas publicaciones:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...