
附详细代码及案例文件!!!
先看效果图
知乎视频www.zhihu.com关于数据地图,相信很多朋友还不是很了解,不过没关系,相信你看完这篇文章,你也可以用Excel做出这炫酷的图表。
在这之前,我们要先了解静态数据地图的制作方法
https://zhuanlan.zhihu.com/p/131623552zhuanlan.zhihu.com学会静态做法之后,动态效果实现起来就很简单了
咱开始吧

明确目标:
我们要实现的效果是,当该省被解放时,地图中该省的位置要涂上红色。即当台湾省解放时,台湾省就会被涂上红色。(如上图所示)
步骤:
「数据获取」
从网上搜索全国各省的解放时间,因省内各地解放时间不同,故以省会解放时间作为该省解放时间。
「数据建模」
构建一个动态数据源,如下图,1代表解放,0代表未解放,一开始全部数据都是0,当变为1时,表示该省解放了。

上图表示黑龙江、山东、吉林、河南、辽宁已解放,其它0的为解放。
那么新的问题来了,要怎么实现0自动变为1呢,总不能一个个的逐个输入吧?
如果手动逐个输入,不仅慢,而且还会影响解放的速度。
在此介绍大家一个压箱底,吐血整理了5小时的秘籍:移花接木大法
在B2输入=IF($I$2>ROW(A1)-1,1,0),然后下拉填充公式。
通过此方式,只需在I2单元格输入数字,B列的值就会按照公式要求从0变为1。

解决了逐个手动输入的问题,但是又出现了一个问题。
I2单元格的值该怎么输入呢?
接下来是最关键的一步,也是最难的一步,那就是利用VBA代码控制I2的数值变化。
看到VBA,也许已经有人开始打退堂鼓了。其实没关系,我来教大家。
代码如下:
Sub auto_play()
For y = 1 To 33'从1开始数字到33结束数字
Range("map!i2").Value = y
'将数字填充到I2
Application.CalculateFull
'全部重新计算
Call fill_color
'调用填色过程
Application.Wait (Now + TimeValue("0:00:01"))
'延时1秒
Next y
End Sub
fill_color功能的代码如下,与静态数据地图的代码相同
Sub fill_color()
For i = 2 To 34 '2和34为数据源的起始和结束行
Range("省份").Value = Range("map!a" & i).Value
'将A列的省份填入到F9单元格
ActiveSheet.Shapes(Range("省份").Value).Select
'选中当前省份所对应的地图
Selection.ShapeRange.Fill.ForeColor.RGB = Range(Range("颜色").Value).Interior.Color
'将选中的图形填充F11单元格指向的颜色
Next i
End Sub
把这两行代码插入VB窗口中的代码区,然后保存为.xlsm格式的工作簿。
至此,动态功能已经实现!
接下来再做一个按钮,让用户只需轻轻一点,就能实现全国解放的动态效果。
按钮做法:开发工具→插入→表单控件→按钮→选中auto_play这个宏→确定→修改按钮名称

点击按钮,开始解放
此外,还可以在地图上方用OFFEST函数获取解放的省份名称和时间,通过文字与地图的配合,能够让文字也动态变化,效果如下。

动态数据地图的教程就到这了,如果觉得有用,点个赞支持下呗
只要循序渐进,相信大家都可以学会的。
还有这份超多人收藏的老板报表,分享给你
https://zhuanlan.zhihu.com/p/203401342zhuanlan.zhihu.com