Ajuste de macro para crear gráfico VBA

Necesito ajustar la macro para la lectura de datos con filas variadas.

macro

Sub graficandoSeries()
'x Elsamatilde
Range("J11").Select
    ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select
    Application.CutCopyMode = False
    'se establece cuál será la ultima serie
    x = 1
    If Range("B3") <> "" Then x = Range("A3").End(xlToRight).Column
    'se establece la última fila de datos según col A
    y = Range("A" & Rows.Count).End(xlUp).Row
    'se agregan las series al gráfico
    For i = 2 To x
        'se arman los rangos para asignarlos a cada serir
        If Cells(4, i) <> "" Then
            ini = 4
        Else
            ini = Cells(3, i).End(xlDown).Row
        End If
        rgoy = Range(Cells(ini, i), Cells(y, i)).Address    ' $B$4:$B$20
        rgox = Range(Cells(ini, 1), Cells(y, 1)).Address    ' $A$4:$A$20
        'se crea la serie
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.FullSeriesCollection(i - 1).Name = "=Blad1!" & Cells(3, i).Address
        ActiveChart.FullSeriesCollection(i - 1).XValues = "=Blad1!" & rgoy  '$B$4:$B$20
        ActiveChart.FullSeriesCollection(i - 1).Values = "=Blad1!" & rgox   '$A$4:$A$20
        'las sgtes series se establecen en eje secundario 
        If i > 2 Then ActiveChart.FullSeriesCollection(i - 1).AxisGroup = 2
    Next i
        'ubicación de leyeda y configuración de ejes
        ActiveChart.SetElement (msoElementLegendBottom)
        ActiveChart.SetElement (msoElementSecondaryValueAxisNone)
    Range("J7").Select
End Sub

1 respuesta

Respuesta
1

¿Necesitas graficar de a un rango por vez? Es decir, ¿solo col F?

Actualmente la macro recorre la fila 3 y grafica todos los rangos encontrados. Y allí se grafica solo los rangos de valores de cada col, es decir que cuando llega a la col D grafica desde la fila 7 y cuando llega a la col F lo hará desde la fila 11.

Si veo con esta nueva muestra, de que no siempre todas las col llegan hasta el final que llega a la col A. Eso lo puedo ajustar, pero confirmame si está bien que recorra el rango de fila 3 o lo necesitás según selección... o sea solo el rango del valor 0,5 (col F).

Elsa buenos días, es todo los rangos solo hice una muestra para explicar que algunos rangos no llegan hasta última fila muy agradecido por su valioso aporte.

Probala así:

Sub graficandoSeries()
'x Elsamatilde
Range("J11").Select
    ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select
    Application.CutCopyMode = False
    'se establece cuál será la ultima serie
    x = 1
    If Range("B3") <> "" Then x = Range("A3").End(xlToRight).Column
    'se agregan las series al gráfico
    For i = 2 To x
    'se arman los rangos para asignarlos a cada serie
        If Cells(4, i) <> "" Then
            ini = 4
        Else
            ini = Cells(3, i).End(xlDown).Row
        End If
        'se establece la última fila de datos según col i
        y = Cells(ini, i).End(xlDown).Row
        rgoy = Range(Cells(ini, i), Cells(y, i)).Address    ' $B$4:$B$20
        rgox = Range(Cells(ini, 1), Cells(y, 1)).Address    ' $A$4:$A$20
    'se crea la serie
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.FullSeriesCollection(i - 1).Name = "=Blad1!" & Cells(3, i).Address
        ActiveChart.FullSeriesCollection(i - 1).XValues = "=Blad1!" & rgoy  '$B$4:$B$20
        ActiveChart.FullSeriesCollection(i - 1).Values = "=Blad1!" & rgox   '$A$4:$A$20
        'las sgtes series se establecen en eje secundario
        If i > 2 Then ActiveChart.FullSeriesCollection(i - 1).AxisGroup = 2
    Next i
        'ubicación de leyeda y configuración de ejes
        ActiveChart.SetElement (msoElementLegendBottom)
        ActiveChart.SetElement (msoElementSecondaryValueAxisNone)
    Range("J7").Select
End Sub

Cada rango se ajusta al total de filas de la col de la serie.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas