首页 > 解决方案 > 根据循环索引计算的范围生成图表

问题描述

我有一个数据集,它在 4 张纸上包含 38 个变量。我想为 4 张表中的每个变量生成趋势线图。

示例数据布局
在此处输入图像描述

所需的图表格式
在此处输入图像描述

Sub CreateChart_Ex1()

'works, proivdes a chart with: =SERIES(Spring!$A$4,Spring!$B$1:$P$1,Spring!$B$4:$P$4,1)
Set WS = Worksheets("Spring")

WS.Activate

WS.Range("A1:P1, A4:P4").Select

WS.Shapes.AddChart2(227, xlLine).Select

'why doesn't this loop work? provides a chart with =SERIES(,,Spring!$A$1:$P$1,1)
For i = 4 To 38

    WS.Activate

    WS.Range("A1:P1, Ai:Pi").Select

    WS.Shapes.AddChart2(227, xlLine).Select

    ActiveChart.ChartArea.Copy
    Sheets("Graphs").Select
    ActiveSheet.Pictures.Paste.Select
    Sheets("Spring").Select

Next i

End Sub

for 循环不会生成包含数据的图表。看起来它在尝试计算“A1:P1,Ai:Pi”时会丢失。

我怎样才能生成所有 38 个图表?

另外,如何将图表一个接一个地粘贴,而不是一个接一个地粘贴?

标签: excelvba

解决方案


要选择“A1”下的第i行,请使用

Range("A1").Cells(i,1)   ' reference [Ai]

并扩展对 P 列(第 16 列)的引用,请使用

Range("A1").Cells(i,1).Resize(1,16)      'reference [Ai:Pi]

在您的情况下i 是一个数字(整数),并且范围对象需要一个字符串值作为单元格引用。所以Ai是无效的,你可以(但不应该)做的是与Range("A" & i). 更好的解决方案是从已知的单元格引用(如“A1”)开始,然后使用

VBA 解释
.Cells(i,j) 引用表的i第 -th 行和j-th 列
.Offset(i,j) i按行和j列移动引用
.Resize(n,m) 展开引用以包括n行和m

推荐阅读