Home » excel » excel – How do I create a VBA macro that will graph a changing range?

excel – How do I create a VBA macro that will graph a changing range?

Posted by: admin April 23, 2020 Leave a comment

Questions:

Currently, I have a table that will automatically update when new data is added to a spreadsheet. I am able to easily create a macro that will graph a set range, but how do I get it to automatically update the range so that it graphs all the right data? My goal is to be able to create a button that I can press at any time that will run a macro on this table and graph the results.

Right now, my code is:

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 6/24/2010 by Nicole
'

''
    Range("R1:S12").Select
    Range("S12").Activate
    Charts.Add
    ActiveChart.ChartType = xlLineMarkers
    ActiveChart.SetSourceData Source:=Sheets("Intakes").Range("R1:S12"),PlotBy _
        :=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Intakes"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "# Cases that day"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
End Sub

Thanks,

Nicole

How to&Answers:

All you need to do differently (though it slightly depends on how the original cell gets its value updated) is to put your Macro in a Worksheet Change Event, then compare the Target to the Range of Interest:

Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Me.Range("R1:S12")) Is Nothing Then
    Range("R1:S12").Select
    Range("S12").Activate
    Charts.Add
    ActiveChart.ChartType = xlLineMarkers
    ActiveChart.SetSourceData Source:=Sheets("Intakes").Range("R1:S12"),PlotBy _
        :=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Intakes"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "# Cases that day"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
End If  

End Sub

Answer:

FYI, found another solution for this…

I was struggling with the same problem:

I had already created a dynamic name that selects my desired graph range [the whole range], but after I inserted this name into the graph range, it immediately converted back to a static range [cell reference] and no longer graphed my dynamic range name.

I created a macro: select graph, change data selection, overwrite static cell range with my created dynamic name, enter.

I assigned this macro to a “Update Graph” button, but noticed the macro had taken the name’s range as static, not dynamic.

SO HERE’S THE SOLUTION:
open macro menu, modify created macro…
in the macro, look for the fixed cell range, overwrite it with ‘sheetname’!dynamicname

done. button should now update graph with dynamic range data.

hope this helps someone out there.
cheers.

Answer:

A reasonably simple solution is to make that range a named range, using the input box that is located to the right of the formula input section. That way, instead of referring to the range as “R1:S12”, you can access it by name, Range(“MyOwnRange”). If you insert rows or columns inside the named range, it will resize automatically to include the new rows.