excel - 在 VBA 中编码多行图(循环)

标签 excel vba loops

我敢肯定这个问题有一个相当简单的答案,但是我已经花了好几天的时间试图弄清楚这一点,而我的部门中没有人使用 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/

相关文章:

excel - 如果我不恢复 vba 中的 application.calculation 有什么影响吗?

VBA 宏将 Excel 文件保存到不同的备份位置

SQL 作为 Access 表单字段的控制源

vba - 如果工作簿中每个工作表不包含值,则删除它们的前 5 行

php - Wordpress 查询帖子将每个项目包装在一个 div 而不是一个 li 中,并显示当前页面的后代

vba - 在 VBA 中复制和粘贴过滤的行

excel - 使用 Range() 和 Cells() 选择多个不连续的范围

vba - Excel vba : copy values in a range to another workbook using R1C1 formula

c - 我怎样才能让这段代码重复主要功能

javascript - 循环时输出中额外的 + ; javascript