= SERIES(name, category_labels, values, order)
name为“图表2!$C$1”,表示将C1单元格中的值作为系列名称显示在图例中。这个参数是可选参数,如省略,就默认为系列1、系列2等。如果图表只有一个数据系列,则默认为图表标题。
category_labels为“图表2!$A$2:$A$5”,表示将A2:A5单元格区域的值作为分类轴标签,也就是横坐标显示值。这个参数也是可选参数,如省略,横坐标就显示为从1开始的连续整数。values为“图表2!$C$2:$C$5”,表示将C2:C5单元格区域的值作为数据系列的具体数值。这是一个必选参数。order为“2”,表示该数据系列在所有系列中的序号,本例中序号为2。
Function过程本号之前文章的代码中用到的都是VBA的Sub过程。在VBA中,一个Sub过程就是一种基本的程序单元,使用时通常会将完成某个任务的一系列代码放入一个Sub过程。通过录制宏得到的就是Sub过程,还有一种过程是无法通过录制得到的,它就是Function过程,其实就是在VBA中自定义函数。
这里我们就定义一个可以返回图表数据系列对应单元格区域地址的Function过程。
代码分享
Function rngseries(ByVal Nindex As Integer, ByVal chtchart As Chart) As Range '定义返回数据系列指定单元格区域地址的Range变量 Dim serseries As Series Set serseries = chtchart.SeriesCollection(Nindex) 'Nindex是指代数据系列序号的参数,通过SeriesCollection属性抓取指定序号的数据系列 Set rngseries = Range(Split(Split(serseries.Formula, ",")(2), "!")(1)) '两次采用Split函数,将series公式中的values参数中的单元格区域地址提取出来,并赋给rngseries变量 Set serseries = NothingEnd Function以上代码自定义了一个名为rngseries的Function过程,并定义了两个按值传递的过程参数。其中,Nindex为整形变量,指代数据系列对应序号;chtchart为图表变量。
通过chtchart.SeriesCollection属性可以抓取指定序号的数据系列,这个方法在前面的文章中也应用过。Split函数是将通过serseries.Formula属性返回的公式字符串(图表2!$C$1,图表2!$A$2:$A$5,图表2!$C$2:$C$5,2)按指定分隔符拆分为一维数组。本例中按 “,” 和 “!” 拆分两次后就可以获得values参数中的数据系列所在单元格区域地址。要注意,Split函数分隔的一维数组索引号都是从0开始,所以提取values参数部分,其索引号为2。
这里额外加个鸡腿说明一下过程参数的两种传递方式:按引用传递、按值传递。
按引用传递,主过程只会传递保存在变量数据中的内存地址,而不是数据本身,也就是说主过程中用来传递的参数可能会被被调用过程中的某些语句修改。
按值传递,也就是在定义被调用过程时,在参数前加上ByVal关键字,这时无论被调用过程中的语句如何修改传递参数的值,执行主过程时只会按保存在变量数据中的值运行,不会被修改。
有点绕,不知道解释是否清楚?
如果实在搞不清,那就请记住在定义参数时在前面都加上ByVal,这样可以避免某些意外的错误。
返回数据系列引用区域地址
再回到正题,我们再写一个Sub主过程调用上面的Function过程来返回数据系列引用区域的地址。代码分享Sub getsngseries() Dim chtchart As Chart Set chtchart = ActiveSheet.ChartObjects(1).Chart Dim xh As Variant xh = InputBox("输入要提取的数据系列序号:") MsgBox rngseries(Int(xh), chtchart).Address '利用Address属性输出地址 Set chtchart = NothingEnd Sub主过程中先定义了两个传递参数:数据系列序号xh变量,以及chtchart变量。其中xh变量利用InputBox函数输入。为方便演示,再在菜单栏下插入一个按钮控件(图2),右键编辑按钮文字,并指定给上述主过程(图3)。
图2 插入按钮控件

图3 指定宏
运行效果

图4 返回数据系列引用区域的地址
总结本文分享了如何通过VBA快速返回图表中任意数据系列引用的单元格区域的地址,应用了Formula属性、Split函数、Function过程。尽管码了不少字,但这个功能貌似有点儿鸡肋,图表都有了,只要点到图表上睁眼看公式编辑框就好了。好吧,我承认我就是出于兴趣瞎玩一下子,望读者轻喷

2832

被折叠的 条评论
为什么被折叠?



