就像 user1813558 在他的问题中所说的那样“更改饼图颜色”我想选择 Excel 用于饼图(实际上适用于任何图表)的颜色,因为我需要它们与我们精心制作的其他数据可视化保持一致,以便色盲团队成员仍能加入数据拖网会议。但我更愿意在 Excel 表中执行此操作,而不是编写代码。我有没有办法将颜色数据放在 Excel 工作表中,例如作为 RGB 十六进制字符串列,如 7DFF7D,并将图表指向该列以进行颜色选择?
答案1
如果没有代码,你想做的事情就不可能实现。
以下 VBA 函数可用于根据活动工作表中的饼图单元格值设置颜色。颜色值可以是 N 行 x 3 列范围的十进制 RGB 值,也可以是 N 行 x 1 列范围的 6 位十六进制值(其中十六进制数是一组按 RGB 顺序排列的三个 2 位十六进制值)。
该函数需要两个参数:对颜色值范围(例如 A1:A5)的引用和饼图的名称。图表名称可以是默认名称(例如“图表 2”),也可以是为图表指定的名称。
如果输入范围中的列数不等于 3 或 1,或者行数不等于饼图中的数据点数,则该函数返回 #N/A! 错误。
从工作表中删除该函数后,重新着色的图表将保留新的颜色。
Option Explicit
Function SETPIECOLORS(colorRng As Range, chartName As String) As Variant
Dim colorArr As Variant
Dim myChartObject As ChartObject
Dim i As Long
Set myChartObject = ActiveSheet.ChartObjects(chartName)
' // Assign RGB decimal color values to array
If colorRng.Columns.Count = 3 Then
colorArr = colorRng
' // Assign RGB hex color values to array
ElseIf colorRng.Columns.Count = 1 Then
ReDim colorArr(1 To colorRng.Rows.Count, 1 To 3)
For i = 1 To colorRng.Rows.Count
colorArr(i, 1) = "&H" & Left(colorRng(i).Value, 2)
colorArr(i, 2) = "&H" & Mid(colorRng(i).Value, 3, 2)
colorArr(i, 3) = "&H" & Mid(colorRng(i).Value, 5, 2)
Next
Else
' // Number of columns in color range not equal to 1 or 3
SETPIECOLORS = CVErr(xlErrNA)
Exit Function
End If
With myChartObject
With .Chart.SeriesCollection(1)
If UBound(colorArr, 1) = .Points.Count Then
' // Set the colors of the pie data points
For i = 1 To .Points.Count
.Points(i).Interior.Color = RGB(colorArr(i, 1), colorArr(i, 2), colorArr(i, 3))
Next
Else
' // Number of rows in color range does not equal number of data points
SETPIECOLORS = CVErr(xlErrNA)
Exit Function
End If
End With
End With
SETPIECOLORS = True
End Function
可以通过将该功能复制到通过从 Excel 功能区访问的开发人员/Visual Basic 菜单插入的新模块中来安装该功能。