利用Excel绘制中国热力地图
准备工作
工具准备
- Excel365版本
- WPS非会员安装VBA插件
- 将文档启用宏模式并另存为宏工作簿:文件-选项-信任中心-宏设置-启用VBA
数据准备
- 2023年全国各省行政区人口数据
- 广东省2023年各市GDP数据
数据范围划分
- 方法1:直接利用分位数划分数据(直接用五分位数将全国人口数据划分为五等份,分界值=ROUNDUP(PERCENTILE(数据所在列,分位点),0))
- 方法2:结合数据实际,自定义数据范围(如本例的划分)
色块填充
- 颜色列文本框填充不同颜色
导入模板地图
- 可在阿里云地图下载SVG格式的矢量地图模板,并导入excel
- 矢量地图各板块命名:在Excel右上角处逐一修改各省市模块名称。
VBA代码编辑
- 代码逻辑:遍历所有行,在每次循环中获取B列的人口数据,对其进行规则判断,取得对应规则单元格的背景色,用该背景色填充该行对应的省份名称形状。
1 | Sub SetMapColor() |
添加地图标签
标签添加VBA代码编辑
- 给各省市模块添加名字,也可添加数据标签
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43Sub HeatMap_fill_text()
Dim cityName As String ' 定义名称
Dim shapeObj As shape
Dim textBox As shape
dataSum = Range("A65535").End(xlUp).Row ' 获取数据源结束行
For i = 2 To dataSum ' 数据源的起始和结束行
cityName = Range("A" & i).Value ' 获取当前城市名称
Set shapeObj = ActiveSheet.Shapes(cityName) ' 获取形状对象
On Error GoTo 0 ' 关闭错误处理
If Not shapeObj Is Nothing Then
' 在形状上添加文本框
Set textBox = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
shapeObj.Left, shapeObj.Top + (shapeObj.Height / 2) - 10, shapeObj.Width, 20)
' 设置文本框的内容为城市名称
textBox.TextFrame.Characters.Text = cityName
' 确保文本框中的文本可见并设置为楷体
With textBox.TextFrame.Characters
.Font.Name = "华文楷体" ' 设置字体为华文楷体
.Font.Size = 6 ' 字体大小
.Font.Color = RGB(0, 0, 0) ' 字体颜色(黑色)
End With
' 使文本框的背景透明
textBox.Fill.Visible = msoFalse ' 使文本框的背景透明
' 去掉文本框的边框
textBox.Line.Visible = msoFalse ' 隐藏文本框边框
' 将文本框的对齐方式设置为居中
textBox.TextFrame.HorizontalAlignment = xlHAlignCenter
textBox.TextFrame.VerticalAlignment = xlVAlignCenter
Else
MsgBox "未找到名为 " & cityName & " 的形状!"
End If
Next i
End Sub
标签删除VBA代码编辑
- 删除地图形状的所有文本框,即文本标签
1
2
3
4
5
Sub DeleteAllTextBoxes()
ActiveSheet.TextBoxes.Delete
End Sub
添加表单控件
- 开发工具-插入-表单空间-第一个工具
- 右键单击控件-指定宏-选中对应的宏进行绑定,点击控件进行宏操作。
Excel技巧
- 选中所有文本框OR图像形状:Crtl+G–定位条件-对象
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 AquaMind✨!
评论