使用VBA巧妙获取图表数据源区域

32 篇文章 1 订阅
8 篇文章 0 订阅

在日常工作中,使用VBA操作Excel图表是经常遇到的场景。

示例图表如下:

在这里插入图片描述

使用如下代码可以更新图表的数据源区域,增加一个数据系列。

Sub UpdateChart()
    ActiveSheet.ChartObjects(1).Activate
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$D$6")
End Sub

更新后的图表如下所示。

在这里插入图片描述

代码很简单,即使大家不知道SetSourceData方法,也可以通过录制宏的方法获得代码。

现在问题来了,如何读取图表的数据源区域呢?Chart对象并没有SourceData属性,也没有GetSourceData方法。这只能说明微软并未提供相应的接口,我们仍然可以使用变通的方法来获取图表的数据源区域。

示例代码如下:

Sub GetDataSource()
    Dim objCht As chart, sFormula As String
    Dim aTxt, topRightCell As Range, bottomLeftCell As Range
    Set objCht = ActiveSheet.ChartObjects(1).chart
    sFormula = objCht.SeriesCollection(1).Formula
    aTxt = Split(sFormula, ",")
    With Range(aTxt(1))
        Set topRightCell = .Cells(.Cells.Count)
    End With
    sFormula = objCht.SeriesCollection(objCht.SeriesCollection.Count).Formula
    aTxt = Split(sFormula, ",")
    Set bottomLeftCell = Range(aTxt(2)).Cells(1)
    With Range(topRightCell, bottomLeftCell)
        Debug.Print "图表数据源所在工作表:" & .Parent.Name
        Debug.Print "图表数据源地址:" & .Address
    End With
End Sub

【代码解析】
第4行代码获取活动工作表中的第一个Chart对象,需要注意的是ChartObject和Chart是两个不同的对象,Chart对象是ChartObject对象的子对象。
第5行代码获取图表中第一个系列的公式,输出如下所示。

 =SERIES(Sheet11!$A$2,Sheet1!$B$1:$D$1,Sheet1!$B$2:$D$2,1)

其语法格式如下:

=SERIES(<series name>,<x values>,<y values>,<plot order>)

第6行代码使用逗号作为分隔符拆分公式,结果数组下标下界为零。
第7行代码中aTxt(1)为数组中第二个元素,即x轴的值对应的单元格区域(下文简称为x轴区域),即:Sheet1!$B$1:$D$1,这种包含Sheet1!的字符串可以作为Range( )的参数,无需进一步拆分。
第8行代码获取x轴区域的最后一个单元格,即图表数据区域的右上角单元格。
第10行代码获取图表最后一个系列的公式,其中objCht.SeriesCollection.Count为图表中系列的总数。
第12行代获取y轴区域的第一个单元格,即图表数据区域的左下角单元格。
第13行代码使用两个边角单元格获取图表数据区域。
第14行代码输出工作表名称。
第14行代码输出数据源地址。

输出结果如下:

图表数据源所在工作表: Sheet1
图表数据源地址:$B$1:$D$6
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Excel VBA生成雷达图,可以遵循以下步骤: 1. 打开Excel,并在工作表中准备好数据。数据应该包含要在雷达图中显示的各个类别以及每个类别的数值。 2. 在Excel中按下“ALT”和“F11”键打开Visual Basic for Applications(VBA)编辑器。 3. 在VBA编辑器中,点击“插入”菜单并选择“模块”。在新建的模块中,编写VBA代码以生成雷达图。 4. 首先,使用对象变量指定所需的工作表,例如:`Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sheet1")`。将“Sheet1”替换为实际数据所在的工作表名称。 5. 然后,使用对象变量指定要用于创建雷达图的数据范围,例如:`Dim dataRange As Range: Set dataRange = ws.Range("A1:B6")`。将“A1:B6”替换为实际数据所在的单元格范围。 6. 接下来,创建一个新的图表对象,并将其关联到指定的工作表和位置,例如:`Dim radarChart As ChartObject: Set radarChart = ws.ChartObjects.Add(100, 100, 300, 300)`。此示例中,雷达图将在工作表的(100,100)位置创建,大小为300x300像素。 7. 然后,将图表类型设置为雷达图,例如:`radarChart.Chart.ChartType = xlRadar`。 8. 最后,设置数据范围并应用于图表对象,例如:`radarChart.Chart.SetSourceData dataRange`。 9. 完成以上步骤后,可以保存和关闭VBA编辑器,并返回Excel工作表。此时,将会在工作表上创建一个雷达图,其中显示了指定的数据。 使用Excel VBA生成雷达图可以帮助用户更高效地处理大量的数据,并根据需要进行自定义设置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值