我敢肯定这个问题有一个相当简单的答案,但是我已经花了好几天的时间试图弄清楚这一点,而我的部门中没有人使用 VBA 足以知道这一点。
我是自动化图表的新手,但我有一个项目需要制作近 800 个图表!数据本身相当简单,有 4 个变量(列):县、市、商店类型和员 worker 数:
COUNTY CITY STORE TYPE NUMBER OF EMPLOYEES
X A 1 100
X A 2 100
X A 3 100
X A 4 100
X B 1 100
X B 2 100
X B 3 100
X B 4 100
我需要为每个县/市组合制作条形图,其中商店类型作为 X 值,员 worker 数显示在 Y 轴上。这在 VBA 中非常容易做到:
Sub makegraph2()
Range("A2:D5").Select
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$D$5")
ActiveChart.ChartTitle.Text = "Employees per Store Type"
Selection.Format.TextFrame2.TextRange.Characters.Text = "Employees per Store
Type"
End Sub
我没有复制/粘贴相同的图表并向下重新选择每 4 行的数据,而是试图找到一种通过循环实现自动化的方法。我自己尝试过这样做(仅测试 50 行((A2:D50 代表所有 4 列和 50 行)),因此不会得到 800 个错误的图形并导致我的计算机崩溃)以多种不同的方式使用偏移量。我最近一次尝试生成一个包含所有 50 行的图表:
Sub makegraph()
Dim Row As Integer
For Row = 1 To 50
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("Sheet1!A2:D50").Offset(4, 0)
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = "Employees by Store Type"
Next Row
End Sub
在此之前,我制作了单独的图表,但它们都是相同的数据(不会下降 4 行来绘制下一组图表)。很明显我用错了偏移和范围,但我不知道怎么......
任何帮助都非常感谢!谢谢!!
最佳答案
未经测试,但试试这个:
Sub makegraph()
Dim i As Long, co, cht As Chart '<<edit here
Dim sht As Worksheet
Set sht = Sheets("Sheet1")
For i = 1 To 50
Set co = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered)
'position and size the chart here by setting the
' Top/Left/Width/Height properties
With co.Chart
'calculate the required offset
.SetSourceData Source:=sht.Range("A2:D5").Offset((i - 1) * 4, 0)
.ChartTitle.Text = "Employees by Store Type"
End With
Next i
End Sub
关于excel - 在 VBA 中编码多行图(循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51975714/