[本文软件Excel 2010]

效果图:

首先我们看一下数据源
1.JPG 
数据源中第二列是对应图形的名称。

首先创建图形,我们可能在网络中找到各个地图的矢量图形。
不过不是每个地图图形都适合我们,或许企业划分非按照行政区划分。因此可以尝试自己绘制,如下图:
5.JPG 
绘制的方法,可以复制过一张地图。然后通过插入“形状”来按照自己的需求描。

完成后,我们在“开发工具”选项卡中选择插入“组合框”。组合框右键“设置控件格式”
2.JPG 
当我们选择这个组合框时,链接的单元格中的数值就会随之改变,我们的数据就以此变化。
控件链接的内容:
3.JPG 

此时需要建立图例和辅助数据来帮助完成图形色彩的选择,如图:
4.JPG 
因为是从小到大排序,且兼顾控件的数据源,因此公式如下:
第一列,选择的占比

  1. =SMALL(OFFSET($R$79:$R$86,0,$N$72-1,8,1),ROW(1:9))
复制代码

第二列,图例的标识名称

  1. =INDEX($N$79:$N$86,MATCH(M62,OFFSET($R$79:$R$86,0,$N$72-1,8,1),0))
复制代码

第三列,单元格颜色对应的形状名称,此处为拼音,和数据源中的形状名称保持一直

  1. =INDEX($O$79:$O$86,MATCH(N62,$N$79:$N$86,0))
复制代码

以上均为数组公式,需要按Shift+Ctrl+Enter执行。为了能使图例显示清晰,选中第三列右键“设置单元格格式”,“自定义”,类型中输入三个分号,即“;;;”。
此操作会使公式形成的内容不可见。如图
7.JPG 

接着就是定义单元格的颜色名称,定义的颜色名称会被引用添加至图形的填充颜色。
“公式”选项卡“名称管理器”新建各个单元格的名称,如图:
11.JPG 

随后按Alt+F11打开VBE编辑器,输入图形填充的VBA代码:

  1. Sub 图表填色()
  2. On Error Resume Next
  3. For i = 62 To 69
  4.     ActiveSheet.Shapes(Range("O" & i).Value).Select
  5.     Selection.ShapeRange.Fill.ForeColor.RGB = Range(Range("P" & i).Value).Interior.Color
  6.     Next i
  7. End Sub
复制代码

然后右键控件“指定宏”
8.jpg 
选择刚才创建的宏名称。
9.jpg 

此时如果我们选择控件“组合框”的内容,将会得到不一样的图表类型。不过为了得到更好的显示效果,我们可以采用照相机的方式来组合。
首先将照相机找到,并添加到快速访问工具栏。位置是“开始”,“选项”,如下图:
6.jpg 

选择我们已经完成的图形所在的单元格,然后点击“照相机”。接着在需要的位置拖动鼠标,即可放置图片。此时再选择图例,照相机,拖动鼠标,完成图例放置。
这样就完成了一个跟随控件变化而变化的图表了。

 

 源文件可查看下面的附件。