【问题标题】:How to automate making charts for every N number of cells and rows in Excel?如何自动为Excel中的每N个单元格和行制作图表?
【发布时间】:2021-10-31 11:10:39
【问题描述】:

我正在处理一个包含大约 17k 个值的大型数据集,我需要为每 29 个值制作一个图表。例如,如果数据集有 58 个值,我需要为每 29 个值制作一个图表,从而制作两个图表。

我编写了以下代码来制作图表:

'''

Sub Charts()
'
' Charts Macro
'

'
    Range("D3:D32").Select
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$D$3:$D$32")
    Application.CutCopyMode = False
    Application.CutCopyMode = False
    ActiveChart.FullSeriesCollection(1).Name = "=""Marginal Costs"""
    ActiveChart.FullSeriesCollection(1).XValues = "=Sheet1!$C$3:$C$32"
     Range("D32:D61").Select
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$D$32:$D$61")
    Application.CutCopyMode = False
    Application.CutCopyMode = False
    ActiveChart.FullSeriesCollection(1).Name = "=""Marginal Costs"""
    ActiveChart.FullSeriesCollection(1).XValues = "=Sheet1!$C$32:$C$61"
End Sub

'''

对于 17k 值来说,这是一个相当乏味的步骤。

有人可以建议一种更简单的方法来制作数据图表吗?我将对此深表感谢。

【问题讨论】:

    标签: excel vba loops


    【解决方案1】:

    使用步长为 29 的 For/Next Loop

    Option Explicit
    
    Sub ChartsMacro()
      
        Const SIZE = 29
        
        Dim ws As Worksheet, cht As Chart, c, sTitle As String
        Dim lastrow As Long, r As Long, n As Long, L As Long, T As Long
        Dim t0 As Single: t0 = Timer
        
        Application.ScreenUpdating = False
        Set ws = ActiveSheet
        With ws
      
            lastrow = .Cells(.Rows.Count, "C").End(xlUp).Row
            For r = 3 To lastrow Step SIZE
                n = n + 1
                Application.StatusBar = "Chart " & n
                
                ' position and title chart
                sTitle = "Chart " & n & " (" & r & " to " & r + SIZE & ")"
                L = .Range("F" & r + 1).Left
                T = .Range("F" & r + 1).Top
                .Range("C" & r).Resize(, 10).Borders(xlEdgeTop).Color = vbBlack
                ' create chart
                Set cht = .Shapes.AddChart2(227, xlLine, Left:=L, Top:=T).Chart
                cht.SetSourceData Source:=.Range("D" & r).Resize(SIZE + 1)
                cht.ChartTitle.Text = sTitle
                cht.FullSeriesCollection(1).Name = "=""Marginal Costs"""
                cht.FullSeriesCollection(1).XValues = .Range("C" & r).Resize(SIZE + 1)
            Next
        End With
        Application.ScreenUpdating = True
        Application.StatusBar = "Done"
    
        MsgBox n & " Charts created in " & Format(Timer - t0, "0.0") & " secs"
    End Sub
    

    【讨论】:

      【解决方案2】:

      嵌套 for 循环是我过去处理类似问题的方式。类似的东西

      For i=1 to 17k/29
           create chart
           for k=1 to 29
               range = i*k
               data = range
      

      假设您的数据是连续的并且每次都在相同的范围内,您只需找出单个集合的实际步骤,然后放手。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-10
        • 1970-01-01
        • 2022-10-07
        • 2023-03-21
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 2021-12-01
        相关资源
        最近更新 更多