Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 2007使用VBA创建许多图表_Excel_Vba_Charts - Fatal编程技术网

Excel 2007使用VBA创建许多图表

Excel 2007使用VBA创建许多图表,excel,vba,charts,Excel,Vba,Charts,我一直在尝试使用VBA创建许多图表。我开始使用宏记录功能,但进展不大 我有一个变量数据集,我需要为它绘制每一行的图表。一个单元格是序列名称,数据是同一行上的(固定)单元格范围,并根据一系列日期(顶行)打印 所以我得到的是这个(对于单个图表) 如果A3是第一个包含名称数据的单元格,我想循环每一行,为每个系列生成一个新图表 我已经设法从一个输入框中输入了起点,但这并不是真正必要的。这是给我用的,不是给别人用的。如果它从一个固定点开始循环,直到到达一个空白单元格,我会很高兴 我不能做的一点是,找出如何

我一直在尝试使用VBA创建许多图表。我开始使用宏记录功能,但进展不大

我有一个变量数据集,我需要为它绘制每一行的图表。一个单元格是序列名称,数据是同一行上的(固定)单元格范围,并根据一系列日期(顶行)打印

所以我得到的是这个(对于单个图表)

如果
A3
是第一个包含名称数据的单元格,我想循环每一行,为每个系列生成一个新图表

我已经设法从一个输入框中输入了起点,但这并不是真正必要的。这是给我用的,不是给别人用的。如果它从一个固定点开始循环,直到到达一个空白单元格,我会很高兴

我不能做的一点是,找出如何为每次迭代生成单元格范围

数据截图

示例图表的屏幕截图

当引用范围时,您可以使用变量在每次迭代中“移动”引用。 例如,如果要在A列的前10行中插入一些文本,可以编写:

Range("A1").Value = "Hello"
Range("A2").Value = "Hello"
Range("A3").Value = "Hello"
Range("A4").Value = "Hello"
etc...
相反,您可以使用一个循环,通过使用循环变量
i
,在每次迭代中将
范围
引用向下移动一行:

For i = 1 to 10
    Range("A" & i).Value = "Hello"
Next i
如果需要,您还可以调整行中的引用以获得所需的结果,例如
范围(“a”&i*2)。Value=“Hello”
将通过将
i
的值乘以2,将文本添加到偶数行2-20

如果要对数据中的每一行重复循环,则可以使用
范围(“”.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

如果上面的内容不符合您的预期,您可能需要对其进行调整,但我希望这能帮助您解决问题。

在引用范围的地方,您可以使用变量在每次迭代中“移动”引用。 例如,如果要在A列的前10行中插入一些文本,可以编写:

Range("A1").Value = "Hello"
Range("A2").Value = "Hello"
Range("A3").Value = "Hello"
Range("A4").Value = "Hello"
etc...
相反,您可以使用一个循环,通过使用循环变量
i
,在每次迭代中将
范围
引用向下移动一行:

For i = 1 to 10
    Range("A" & i).Value = "Hello"
Next i
如果需要,您还可以调整行中的引用以获得所需的结果,例如
范围(“a”&i*2)。Value=“Hello”
将通过将
i
的值乘以2,将文本添加到偶数行2-20

如果要对数据中的每一行重复循环,则可以使用
范围(“”.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

如果上面的内容不完全符合您的预期,您可能需要对其进行调整,但我希望这能帮助您解决问题。

嗨,Brian,您不太清楚您在尝试什么。你能发布一张你的数据的图片吗?嗨,布莱恩,现在还不清楚你在尝试什么。你能发布一张你的数据的图片吗?太好了。是的,这就是我想做的。现在我需要对现有的工作表进行一些错误检查,而不是每次迭代都添加一个新的工作表,但这非常感谢。太好了。是的,这就是我想做的。现在我需要对现有的工作表进行一些错误检查,而不是每次迭代都添加一个新的工作表,但这非常感谢。