我的 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 循环制作一系列图表,而无需每次为每个不同的图表重新定义范围/数据集。有谁知道有什么好方法吗?
最佳答案
下面将整个“范围”视为一个不等于范围的字符串
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
您可能还需要考虑上面图表的位置,这将使它们全部重叠。
关于vba - 如何使用 R for 循环定义范围来创建图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31520031/