引言:今天制作的图表来源于chandoo.org,很cool!
本文展示一份基于超链接的交互式仪表图,如下图1所示:
图1
怎么样?是不是让你印象深刻?
要创造这样一份图表,只需要一堆数据、一张图表、一行VBA代码和一些小技巧。
1.示例数据
仔细观察图1,会发现我们只有一个图表,并且根据用户选择的选项来更改图表的源数据。因此,假设有4个系列的数据——销售额、成本、利润和顾客数量,我们将添加第五个系列。这将始终显示用户选择的系列的数据,如下图2所示。
图2
让我们将第五列中的系列名称称为“valSelOption”。
注意:使用这个系列名称,可以使用MATCH公式从4个系列中获取该系列的位置,知道位置后,就可以使用INDEX公式获取相应的值。
2.创建图表
只需根据上图2第5列中的数据创建图表,可以根据需要对其进行格式化。
3.创建仪表区域
有点棘手,但也很容易。只需设置4列区域(因为有4个图表),这样就可以放置图表和鼠标悬停单元格以供选择,如下图3所示。
图3
4.创建翻转效果
需要一个简单的宏或UDF(用户自定义函数)来根据用户鼠标指向的位置来更改系列。然而,如何在鼠标悬停时激活该UDF?这就是我们可以使用超链接的地方。
你知道可以使用UDF作为超链接的来源吗?就像:
=HYPERLINK(“http://test.com”,”点击这里”)
也可以这样:
=HYPERLINK(自定义的函数名,”点击这里”)
此时,当你点击这个链接时,Excel将运行你的函数。
但是,还不止如此。当你将鼠标放在链接上时,Excel也会运行该函数。无需点击!
我们知道,Excel不允许函数更改其他单元格中的值或者对其格式化。然而,如果从超链接来使用函数,则该限制不适用!!!
因此,我们编写了仅一行代码的自定义函数:highlightSeries:
Public Function highlightSeries(seriesName AsRange)
Range("valSelOption") = seriesName.Value
End Function
此函数将系列名称作为变量并将其赋值给命名区域valSelOption。随着valSelOption的变化,图表的数据也会发生变化,得到新的图表。
假设系列名称在单元格区域B3:E3,我们在所有4个单元格中输入超链接公式。例如,在单元格B6中,输入公式:
=IFERROR(HYPERLINK(highlightSeries(B3)),"6")
注意,虽然在HYPERLINK函数中使用UDF可以解决问题,但Excel也会抛出错误#VALUE!错误,我们使用IFERROR函数来修复。使用webdings字体,数字6显示为向下箭头符号。
注意,对超链接单元格进行自动换行,以便在鼠标悬停在单元格上的任意位置时链接有效,而不仅仅是向下箭头符号。
5.添加条件格式
为了使仪表图看起来更具交互性,可以添加条件格式来对鼠标悬停的单元格应用相应的格式,如下图4所示。
图4
至此,大功告成!