如何使用R for循环来定义范围以创建图形

时间:2015-07-20 15:09:15

标签: excel vba excel-vba for-loop charts

我在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循环制作一系列图表,而不是每次为每个不同的图表重新定义范围/数据集。有谁知道这样做的好方法吗?

1 个答案:

答案 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

您可能还想考虑上面图表的位置,将它们全部叠加在一起。