Excel 2007使用VBA创建许多图表

时间:2016-05-18 10:54:45

标签: excel vba charts

我一直在尝试使用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的单元格,我想循环每一行,为每个系列生成一个新图表。

我已经设法从输入框中获取起点,但这不是必需的。对我来说不是为了别人而使用。如果它从一个固定点开始并循环直到它到达一个空白区域,我会很高兴。

我不能做的,就是弄清楚如何为每次迭代生成单元格范围。

数据截图

screenshot of data

示例图表

的屏幕截图

Screenshot of example Chart

1 个答案:

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

如果它没有完全符合您的预期,您可能需要调整上述内容,但我希望这可以帮助您解决问题。