如何在Excel中为树状图应用预定义配色方案?
Excel树状图自定义配色实现方案
问题背景
现有Excel表格数据如下:
| product | class | perc |
|---|---|---|
| PROD-A | II Class | 1% |
| PROD-B | I Class | 10% |
| PROD-C | V Class | 59% |
| PROD-D | III Class | 20% |
| PROD-E | V Class | 10% |
已基于该数据生成初始树状图,希望按照指定配色为树状图应用样式,实现手动制作的目标效果,询问是否可行及操作方法。
可行性结论
完全可行,Excel支持为树状图的不同类别(或节点)自定义填充颜色,无需完全手动逐个设置。
具体操作步骤
方法一:基于类别批量设置颜色(推荐)
- 选中树状图,点击图表右侧的「图表元素」按钮(+号),勾选「数据标签」,确认每个区块对应的类别/产品
- 右键点击树状图中某一
Class类别下的任意区块(比如所有V Class的区块),选择「设置数据点格式」 - 在右侧弹出的格式面板中,切换到「填充」选项,选择「纯色填充」,选取指定配色中对应类别的颜色
- 重复上述步骤,为每个Class类别设置对应的配色
- 若需要为单个产品(如PROD-C)单独调整颜色,直接右键点击该产品对应的区块,单独设置填充色即可
方法二:使用VBA实现动态自动配色(适用于数据需更新的场景)
- 按
Alt + F11打开VBA编辑器 - 插入新模块,粘贴以下代码(需根据实际配色和类别调整RGB值、图表名称及数据区域):
Sub SetTreemapColors() Dim cht As Chart Dim srs As Series Dim i As Integer, j As Integer Dim classColor As Variant Set cht = ActiveSheet.ChartObjects("树状图 1").Chart '替换为你的图表名称 Set srs = cht.SeriesCollection(1) '定义类别与对应配色的RGB值 classColor = Array( _ Array("I Class", RGB(255, 190, 190)), _ Array("II Class", RGB(190, 255, 190)), _ Array("III Class", RGB(190, 190, 255)), _ Array("V Class", RGB(255, 255, 160)) _ ) For i = 1 To srs.Points.Count Dim currentClass As String currentClass = ActiveSheet.Cells(i + 1, 2).Value '假设类别数据在第2列,表头在第1行 '匹配对应颜色并设置 For j = LBound(classColor) To UBound(classColor) If classColor(j)(0) = currentClass Then srs.Points(i).Format.Fill.ForeColor.RGB = classColor(j)(1) Exit For End If Next j Next i End Sub - 运行脚本,树状图会自动按类别应用预设配色
- 可将脚本绑定到工作表的「更改事件」,实现数据更新时自动刷新配色
注意事项
- 若树状图按
product拆分,需准确选中对应产品的区块;若按class分组,可批量选中同类别区块 - 手动设置颜色后,数据更新导致区块大小变化时,颜色会保留对应的数据点,无需重新设置
- 使用VBA时需确保启用宏,且图表名称、数据区域与实际情况匹配
内容的提问来源于stack exchange,提问作者Cesare
相关产品推荐
相关产品推荐

