可通过vba自定义函数获取excel单元格背景色的rgb(如255,204,0)或十六进制(如#ffcc00)代码,支持处理无填充色(返回255,255,255或#ffffff),并可借助worksheet_change事件实现颜色变更自动记录。

如果您需要在Excel表格中快速获取单元格背景颜色的RGB代码,但Excel内置函数无法直接返回颜色值,则可以通过VBA自定义函数实现。以下是实现该功能的具体步骤:
一、启用Excel的开发工具并插入模块
要使用VBA编写自定义函数,需先确保“开发工具”选项卡可见,并在VBA编辑器中创建新模块。该模块将承载用于读取背景色的函数代码。
1、点击Excel左上角“文件”→“选项”→“自定义功能区”→勾选“开发工具”→点击“确定”。
2、在功能区点击“开发工具”,再点击“Visual Basic”打开VBA编辑器。
3、在VBA编辑器中,右键“Normal”或当前工作簿名称→选择“插入”→“模块”。
4、在新建模块的空白窗口中粘贴后续函数代码。
二、编写获取背景色RGB值的VBA函数
该函数以单元格为参数,返回其填充背景的RGB颜色代码(格式为 R,G,B),便于后续分析或条件匹配。函数名为 GetCellColorCode,支持直接在工作表中调用。
1、在模块窗口中输入以下完整代码:
Function GetCellColorCode(cell As Range) As String
Dim clr As Long
clr = cell.Interior.Color
GetCellColorCode = CStr(clr Mod 256) & "," & CStr((clr \ 256) Mod 256) & "," & CStr(clr \ 65536)
End Function
2、关闭VBA编辑器,返回Excel界面。
3、在任意单元格中输入公式:=GetCellColorCode(A1)(将A1替换为目标单元格引用)。
4、按回车后,该单元格将显示类似 255,204,0 的RGB三元组数值。
三、编写获取十六进制颜色代码的VBA函数
部分场景需使用标准Web格式的十六进制颜色码(如#FFCC00),该函数将RGB值转换为大写十六进制字符串,补齐前导零并添加井号前缀。
1、在同一个模块中,另起一行添加以下函数代码:
Function GetCellHexColor(cell As Range) As String
Dim clr As Long
clr = cell.Interior.Color
Dim r As Integer, g As Integer, b As Integer
r = clr Mod 256
g = (clr \ 256) Mod 256
b = clr \ 65536
GetCellHexColor = "#" & Format(Hex(r), "00") & Format(Hex(g), "00") & Format(Hex(b), "00")
End Function
2、保存模块,返回工作表。
3、在单元格中输入公式:=GetCellHexColor(B2)(B2为待查单元格)。
4、结果将显示如 #FFCC00 的标准十六进制颜色代码。
四、处理无填充色(默认白色)的兼容逻辑
当单元格未设置背景色时,Interior.Color 返回 -4142(xlNone),直接计算会导致错误RGB值。本方法加入判断逻辑,统一返回白色对应的标准值,确保函数鲁棒性。
1、在模块中替换原 GetCellColorCode 函数为以下增强版本:
Function GetCellColorCode(cell As Range) As String
Dim clr As Long
clr = cell.Interior.Color
If clr = -4142 Then
GetCellColorCode = "255,255,255"
Else
GetCellColorCode = CStr(clr Mod 256) & "," & CStr((clr \ 256) Mod 256) & "," & CStr(clr \ 65536)
End If
End Function
2、同样更新 GetCellHexColor 函数中的判断分支:
If clr = -4142 Then
GetCellHexColor = "#FFFFFF"
Else
...(原有RGB转HEX逻辑)
End If
五、通过Worksheet_Change事件自动记录颜色变更
若需在用户修改单元格填充色时实时捕获颜色代码,可利用工作表事件自动触发记录。该方法不依赖手动输入公式,适用于监控特定区域的颜色操作。
1、在VBA编辑器中,双击左侧工程资源管理器中的目标工作表(如Sheet1)。
2、在代码窗口顶部下拉菜单中选择“Worksheet”,再选择“Change”事件。
3、输入以下事件响应代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A1:C10")) Is Nothing Then
Application.EnableEvents = False
Me.Range("Z1").Value = GetCellHexColor(Target.Cells(1, 1))
Application.EnableEvents = True
End If
End Sub
4、该代码表示:当A1:C10区域内任一单元格被修改(含格式变更),Z1单元格将自动填入其十六进制颜色代码。









