无论版本,Excel图表均默认提供了自动设置的数值轴刻度,但遗憾的是并未提供类似图表系列数据源的单元格引用功能。有些时候我们制作的图表往往需要手动来设置刻度的最大/最小值,这些手动设置的数值在图表系列引用的数据源数据变化后,大多数情况下必须要再次更改最大/最小值设定,这是一件非常烦琐的事。如何使数值轴刻度的最大/最小值设定和单元格关联,便成为一个非常有价值的问题,解决这个问题的答案便是VBA。

图6.1-1的案例中分割布局的辅助系列使用了数值1,并设置在了次数值纵轴,采用百分比堆积柱状图。如果不设置次数值纵轴,并使用簇状柱形图,则该辅助系列的引用数值就必须始终是主数值纵轴的当前最大值。面临的挑战首先是如何动态获得主数值纵轴的当前最大值;其次由于辅助系列的引用数值变化,主数值纵轴的当前最大值亦会自动发生变化;最后是这个主数值纵轴的刻度设定必须在图表系列引用数值发生变化时动态变化,而非静态。

录制宏

单击“录制宏”按钮,选中分割布局的辅助系列引用的单元格数值区域,在编辑栏进行赋值,录得以下代码段,获取该段代码的目的是后续将图表刻度最大值赋值给单元格。


程序代码:6.4-1a VBA动态图表刻度 录制宏 获取单元格赋值语句

图表的自动化:数值刻度的最大/最小值设定-Excel22


单击“录制宏”按钮,激活图表并选中图表主要数值刻度,在坐标轴格式中设定刻度最大单位为固定模式,录得以下代码段,获取该段代码的目的是后续将单元格赋值给图表刻度最大值,以及获得图表的名称。


程序代码:6.4-1b VBA动态图表刻度 录制宏 设定图表主要数值刻度

图表的自动化:数值刻度的最大/最小值设定-Excel22


整理代码

将上述两段录制宏整理为下列代码段,完成主代码。该代码段包括初始化代码段和主作用代码段两部分。


程序代码:6.4-1c VBA动态图表刻度 整理录制宏

图表的自动化:数值刻度的最大/最小值设定-Excel22


关联到工作表事件中

完成上述代码后,要使图表和数据联动,实现无须借助人工参与的自动化,必须使代码和工作表事件建立关联关系。


程序代码:6.4-1d VBA动态图表刻度 与工作表事件关联

图表的自动化:数值刻度的最大/最小值设定-Excel22