基于地图选择的Excel动态图表(修正)
作图思路:地图由一个个自选图形绘制而成,读者点击某个地区
的图形,会触发一个宏过程,这个宏会记录下用户选择的地区名,并修改图形的填充效果。动态图表模型则会根据宏所记录的地区名变换
图表的数据,产生动态交互的效果。
(地图图形的准备:
首先,在网上找到一个矢量格式的地图文件。所谓矢量格式,是使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,其文件后缀名一般
为.WMF、.AI、.EPS、.CDR等。Excel可以读取.WMF格式的文件,其他格式的一般需要专门的软件打开。导入Excel后,该地图可以打散为一个个的自选图形(右键-取消组合),每个自选图形对应一个区域。选中自选图形,在左上角名称框为自选图形命名,然后回车)
或者用自由曲线绘制自选图形
图1 基于地图选择的动态图表模型。
1.编写公共宏过程
单击菜单“工具→宏→Visual Basic编辑器”(或Alt+F11键),用户选择后调用的公共宏过程。
在左侧窗口中选择ThisWorkbook,在右侧窗口中输入如下代码:--------------------------------------------------------------------------
Sub user_click()
'1、取A1单元格值,将上次选择的地图版块填充黄色,即还原填充色
ActiveSheet.Shapes(Range("A1").Value).Fill.ForeColor.Sch emeColor = 58
'2、将当前选择的地图版块名称填值到A1
Range("A1").Value =
ActiveSheet.Shapes(Application.Caller).Name
'3、将当前选择的地图版块填充红色
ActiveSheet.Shapes(Application.Caller).Fill.ForeColor.Sche meColor = 14
End Sub
--------------------------------------------------------------------------
2.为每个地区图形指定宏调用
以湖北省为例,选中湖北的图形,鼠标右键→指定宏
在宏名输入框中输入如下代码:
'https://www.360docs.net/doc/9912406381.html,er_click’
按同样方法,为其他省的图形一一添加宏代码。熟悉VBA的读者可使用如下宏代码批量添加:
-------------------------------------------------------------------------
Sub auto_add_macro()
'新建一个模型时手动运行,一次性添加宏
For i = 1 To ActiveSheet.Shapes.Count
'5表示对象类型是地图版块
If ActiveSheet.Shapes(i).Type = 5 Then
ActiveSheet.Shapes(i).OnAction =
"'https://www.360docs.net/doc/9912406381.html,er_click'"
End If
Next
End Sub
-------------------------------------------------------------------------
3.测试选择器
现在可以测试选择器了。测试之前,先手动为单元格A1初始化一个值,如“hubei”。然后,用鼠标逐一点击各省的图形,你会发现选择的结果会以拼音名反映在单元格A1中,图形的颜色也会跟随变化。至此,一个地图形式的选择器已经完成。
4.准备动态图表数据源
假设各省的数据存放在工作表data1中,其中A列为省名的拼音名,B列为省名,C~N列为各省1~12月的指标数据,如图5 所示。
图5 动态图表的数据组织。
单元格A2引用工作表dashboard中A1的值,即当前选中的省名。单元格B2:N2均为公式引用,使用Vlookup函数从数据表格中查找返回当前选中省的对应数据。以单元格C2为例,其公式
为: =VLOOKUP($A$2,$A$5:$N$36,COLUMN(C5),0)。
5.制作图表
在工作表data1中以B2:N2为数据源制作图表,格式化至你喜欢的样式,然后将其复制粘贴到工作表dashboard中,放置在地图图形的右侧。
现在,用鼠标在地图上选择不同的省份,你会发现图表将自动跟随变化。至此,一个动态图表已经完成。