我一直在尝试使用VBA创建许多图表。我使用宏录制功能开始但没有取得多大进展。
我有一个可变数据集,我需要为每一行绘制图表。一个单元格是系列名称,数据是同一行上的(固定)单元格范围,并根据一系列日期(顶行)绘制。
所以我拥有的是(对于单个图表)
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Data").Range("A3")
ActiveChart.SeriesCollection(1).Name = "='Data'!$A$3"
ActiveChart.SeriesCollection(1).Values = "='Data'!$MO$3:$RY$3"
ActiveChart.SeriesCollection(1).XValues = "='Data'!$MO$1:$RY$1"
ActiveChart.Name = Sheets("Data").Range("A3")
如果A3
是第一个名为data in的单元格,我想循环每一行,为每个系列生成一个新图表。
我已经设法从输入框中获取起点,但这不是必需的。对我来说不是为了别人而使用。如果它从一个固定点开始并循环直到它到达一个空白区域,我会很高兴。
我不能做的,就是弄清楚如何为每次迭代生成单元格范围。
答案 0 :(得分:0)
在引用范围的情况下,您可以使用变量来移动'每次迭代的参考。 例如,您想要在A列的前10行中插入一些文本,您可以写:
Range("A1").Value = "Hello"
Range("A2").Value = "Hello"
Range("A3").Value = "Hello"
Range("A4").Value = "Hello"
etc...
相反,你可以使用一个“移动”的循环。通过使用循环变量Range
:
i
引用放在一行中
For i = 1 to 10
Range("A" & i).Value = "Hello"
Next i
您还可以根据需要调整参考线以获得所需的结果,例如Range("A" & i * 2).Value = "Hello"
将i
的值乘以2,将文本添加到偶数行2-20。 / p>
如果要为数据中的每一行重复循环,可以使用Range("").End(xlDown).Row
找到底行的行号,同时将顶部单元格引用放在""
标记中,在您的情况下" A3"
把所有这些放在一起,你正在寻找以下内容:
for i = 3 to Range("A3").End(xlDown).Row 'Loop for each row from 3 to the bottom
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Data").Range("A" & i)
ActiveChart.SeriesCollection(1).Name = "='Data'!$A" & i
ActiveChart.SeriesCollection(1).Values = "='Data'!$MO" & i & ":$RY" & i
ActiveChart.SeriesCollection(1).XValues = "='Data'!$MO$1:$RY$1"
ActiveChart.Name = Sheets("Data").Range("A" & i)
next i
如果它没有完全符合您的预期,您可能需要调整上述内容,但我希望这可以帮助您解决问题。