I am trying loop the scatter plot over columns using Excel VBA, but did get idea how to do it.
Here is a dummy data I produced by filling Y series with RAND() function and the figure shows a sample chart I produced.

Here is associated codes:
Sub multichart()
Range("A1:B21").Select
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:B21"), PlotBy _
:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Y1"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveSheet.Shapes("Chart 6").ScaleHeight 0.61, msoFalse, msoScaleFromTopLeft
ActiveChart.PlotArea.Select
Selection.Top = 1
Selection.Height = 106
Selection.Height = 113
With Selection.Border
.ColorIndex = 16
.Weight = xlThin
.LineStyle = xlContinuous
End With
With Selection.Interior
.ColorIndex = 2
.PatternColorIndex = 1
.Pattern = xlSolid
End With
End Sub
I want to loop this process to create N graphs (where N is number of Y columns in any sheet), means vary from sheet to sheet. Also plots will be appended one after another. Y limits and X limit are intended to be same in all plots for comparison. The output look something like (just showing 4 variables for example):

Sorry if this a basic question as I am Excel VBA guest.
You don't say what version of Excel. This works in 2010 and I think should work in other version. But I'm not a VBA chart expert. Hopefully the variable names are self-explanatory:
Sub multichart()
Dim ws As Excel.Worksheet
Dim i As Long
Dim cht As Chart
Dim cho As ChartObject
Dim TitleRange As Excel.Range
Dim DataRange As Excel.Range
Dim ChartHeight As Long
Dim LastCol As Long
Dim LastRow As Long
Dim MaxAmountToChart
Set ws = ActiveSheet
'delete the old ones
For Each cho In ws.ChartObjects
cho.Delete
Next
ChartHeight = 20
With ws
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
MaxAmountToChart = Application.WorksheetFunction.Max(ws.Range(ws.Cells(1, 2), .Cells(LastRow, LastCol)))
Set TitleRange = .Range("A1:A" & LastRow)
For i = 2 To LastCol
Set DataRange = .Range(.Cells(1, i), .Cells(LastRow, i))
Set cht = Charts.Add
cht.Location Where:=xlLocationAsObject, Name:=.Name
Set cho = .ChartObjects(.ChartObjects.Count)
cho.Top = (i - 1) * ChartHeight * .Rows(1).RowHeight
cho.Left = 0
Set cht = cho.Chart
'.Shapes(cht.Name).ScaleHeight 0.61, msoFalse, msoScaleFromTopLeft
With cht
.ChartType = xlXYScatter
.SetSourceData Source:=Union(TitleRange, DataRange), PlotBy:=xlColumns
.HasTitle = True
.ChartTitle.Characters.Text = "Y1"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).MaximumScale = MaxAmountToChart
With .PlotArea
.Top = 1
.Height = 106
.Height = 113
With .Border
.ColorIndex = 16
.Weight = xlThin
.LineStyle = xlContinuous
End With
With .Interior
.ColorIndex = 2
.PatternColorIndex = 1
.Pattern = xlSolid
End With
End With
End With
Next i
End With
End Sub
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With