VBA:修改图表数据范围

Stu*_*art 6 excel charts vba range

我的"图表数据范围"是='sheet1'!$A$1:$Z$10.我想制作一个VBA宏(或者如果有人知道我可以使用的公式,但我无法想出一个),chart1每次运行宏时,将范围的结束列增加1.基本上:

chart1.endCol = chart1.endCol + 1

使用的语法是什么,ActiveChart还是有更好的方法?

San*_*osh 6

Offset function 动态范围使其成为可能.

样本数据

在此输入图像描述

脚步

  • 定义动态命名范围 =OFFSET(Sheet1!$A$2,,,1,COUNTA(Sheet1!$A$2:$Z$2))并为其命名mobileRange
  • 右键单击图表
  • 单击"选择数据"

这个屏幕会来

在此输入图像描述

单击Edit图例条目下的(手机已选中)

在此输入图像描述

  • 将Series值更改为指向mobileRange命名范围.
  • 现在,如果将未来几个月的数据添加到移动销售中,它将自动反映在图表中.


Net*_*loh 5

假设您想要扩展范围(通过添加一列)来为图表中的每个系列添加一个观察值(而不是添加新系列),您可以使用以下代码:

Sub ChangeChartRange()
    Dim i As Integer, r As Integer, n As Integer, p1 As Integer, p2 As Integer, p3 As Integer
    Dim rng As Range
    Dim ax As Range

    'Cycles through each series
    For n = 1 To ActiveChart.SeriesCollection.Count Step 1
        r = 0

        'Finds the current range of the series and the axis
        For i = 1 To Len(ActiveChart.SeriesCollection(n).Formula) Step 1
            If Mid(ActiveChart.SeriesCollection(n).Formula, i, 1) = "," Then
                r = r + 1
                If r = 1 Then p1 = i + 1
                If r = 2 Then p2 = i
                If r = 3 Then p3 = i
            End If
        Next i


        'Defines new range
        Set rng = Range(Mid(ActiveChart.SeriesCollection(n).Formula, p2 + 1, p3 - p2 - 1))
        Set rng = Range(rng, rng.Offset(0, 1))

        'Sets new range for each series
        ActiveChart.SeriesCollection(n).Values = rng

        'Updates axis
        Set ax = Range(Mid(ActiveChart.SeriesCollection(n).Formula, p1, p2 - p1))
        Set ax = Range(ax, ax.Offset(0, 1))
        ActiveChart.SeriesCollection(n).XValues = ax

    Next n
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 如果你要声明变量(你应该这样做),你应该将它们声明为正确的类型:`Dim i as Integer, r as Integer, n as Integer, p1 as Integer, p2 as Integer`。您的声明将“i, r, n, p1”创建为“Variant”:) (2认同)