马震安
以前我们常用表单控件来制作动态图表,通过选项按钮、下拉列表等控件来控制图表的互动。而在下面的实例中只需要鼠标来到相应单元格,不用点击,即可使图表发生动态变化(图1)。操作更加简单了,但实现起来容易吗?让我们在Excel 2016中试试看吧。
1. 巧用简单自定义函数
我们以球员得分数据表为例,打开数据表,整理好数据。
随后点击“公式”选项卡中的“定义名称”,新建名称分别为“姓名”、“数据”,引用位置分别选择J2、K2的两个名称。点击“开发工具”选项卡打开VBA编辑窗口,点击“插入→模块”,在右侧的代码编辑区输入图中的两个简单自定义函数即可(图2)。
接下来,在J9单元格输入“=IF(ISERROR(HYPERLINK(hl($A$1))),$A$1,HYPERLINK(hl($A$1)))”,在J10单元格输入“=IF(ISERROR(HYPERLINK(hl($A$7))),$A$7,HYPERLINK(hl($A$7)))”,J11到J13单元格中的公式依次类推,这样在J9、J10、J11、J12、J13就会显示NBA球员姓名,同时也实现了当鼠标放到J9、J10、J11、J12、J13单元格时,J2单元格就会出现相应的行号值;同样,在K8单元格输入“=IF(ISERROR(HYPERLINK(hll(B$1))),B$1,HYPERLINK(hll(B$1)))”,L8单元格输入“=IF(ISERROR(HYPERLINK(hll(C$1))),C$1,HYPERLINK(hll(C$1)))”,M8到O8单元格中的公式依次类推,这样在K8、L8、M8、N8、O8就会显示各项参数名称,同时也实现了当鼠标放到K8、L8、M8、N8、O8单元格时,K2单元格就会出现相应的列号值;在L1:P1输入相应赛季,在L2单元格中输入“=OFFSET($A$1,COLUMN()-12+$J$2,$K$2,1,1)”,并向右填充到P2,这样就会根据J2、K2单元格的行号、列号获取到制作图表所需要的数据(图3)。
2. 为数据区域添加图表
选定好L1:P2数据区域,插入数据点折线图。根据需要设置好折线图的线条样式、绘图区的背景色;另外,将折线图调整好大小,拖放到显示姓名和各项参数名称所围成的单元格区域,并设置好折线图放置处单元格的填充色(图4)。
3. 设置指定单元格效果
当鼠标移动到相应单元格,除了能获取相应数据,最好单元格还可以有填充色的改变。选定J9:J13,点击“开始”选项卡中“条件格式”下的“新建规则”,在弹出的窗口中点击“新建规则”按钮,再在新弹出的窗口中,规则类型处选择“使用公式确定要设置格式的单元格”,在“为符合此公式的值设置格式”处输入“=$J9=INDEX($A$1:$A$30,$J$2,0)”。点击“格式”按钮,在弹出的窗口中设置好单元格所需要的格式(图5)。
确定后返回“条件格式规则管理器”,在新建规则的“如果为真则停止”处进行勾选。同样道理,选定K8:O8,新建规则,公式处输入“=COLUMN()-$K$2=10”(图6)。
通过这样的设置,就实现了当鼠标移动到相应单元格时,单元格就进行颜色的填充、边框颜色的改变及文字颜色的改变。
4. 对图表进行必要的装饰
为看起来更加美观,需对图表进行一些必要的装饰。插入1个“形状”中的圆角矩形,调整其大小使其比姓名、参数名、图表区稍大些,设置其填充色为无,线条宽度5磅,颜色与单元格填充色一致。将J9:J13单元格横线颜色设置为白色,K8:O8单元格竖线颜色也设置为白色,在J8单元格插入装饰性的图标或文字(图7)。
小提示
HYPERLINK函数具有链接跳转功能,整个IF函数语句就是根据ISERROR()函数的值,如果是错误值就显示相应单元格的值,否则就在J2或K2中显示相应的行列号;而OFFSET函数是以A1单元格作为参考系,向下移动COLUMN()-12+$J$2行,向右移动$K$2列,其中COLUMN()表示当前列号,即L列的列号为12,M列的列号为13。名称的引用位置也可根据需要自己设置,以上涉及到的公式也可在自己所需要的单元格中输入。
小提示
在设置规则格式时,单元格的填充色最好与图表背后单元格区域的填充色一致,这样实现起来效果更加逼真。