我在excel中有一个如下所示的数据集:
MA M1 M2 T1 T2 W1 W2 Th1 Th2 F1 F2
100 1 2 2 1 2 0 0 2 2 1
100 2 0 2 1 2 2 1 2 2 0
101 1 3 0 1 1 0 1 0 1 1
101 0 2 1 1 0 1 1 1 1 1
102 1 1 1 2 0 1 0 0 2 2
102 1 2 0 1 1 0 1 1 0 3
我正在尝试为每个代码(100,101,102)创建一个柱形图,其中每个代码将有2个数据集,水平值将为m1,m2,t1等。 所以最后我想要3列图。我正在尝试使用for循环在VBA中创建这些图形,这是我一直在尝试的:
Sub MA()
Dim i As Integer
Dim row1 As Integer, row2 As Integer
For i = 1 To 6 Step 2
Dim MAChart As Chart
Set MAChart = ActiveSheet.Shapes.AddChart.Chart
With MAChart
row1 = i + 1
row2 = i + 2
.ChartType = xlColumnClustered
.SetSourceData Source:=ActiveSheet.Range("Q& row1 & : & Z & row2")
End With
Next i
End Sub
我不断收到“应用程序定义或对象定义”错误。我无法定义每个图表的范围,因为它基于i而变化。我很想找到一种干净的方法,使用for循环制作一系列图表,而不是每次为每个不同的图表重新定义范围/数据集。有谁知道这样做的好方法吗?
答案 0 :(得分:3)
下面将整个“范围”视为不等于范围的字符串
Range("Q& row1 & : & Z & row2")
尝试使用下面的内容,您不需要row1和row2。记下我如何构建一个有效范围的字符串
Range("Q" & 1+i & ":Z" & 2+i)
与你的代码一起使用,请注意我已经将你的“Dim”移出循环,这不需要创建每个循环但需要“设置”每个循环
Sub MA()
Dim i As Integer
Dim MAChart As Chart
Dim row1 As Integer, row2 As Integer
For i = 1 To 6 Step 2
Set MAChart = ActiveSheet.Shapes.AddChart.Chart
With MAChart
.ChartType = xlColumnClustered
.SetSourceData Source:=ActiveSheet.Range("Q" & i & ":Z" & 1+i)
End With
Next i
End Sub
您可能还想考虑上面图表的位置,将它们全部叠加在一起。