这篇文章用VBA 自定义函数解决这个痛点,零基础也能学会,写完函数后,能像 SUM、AVERAGE 一样直接在单元格里调用,简单高效!
Alt + F11,直接打开 VBA 编辑器注意:保存文件时请选择 .xlsm 格式(启用宏的工作簿),否则 VBA 代码会丢失!
直接复制以下代码到新建的模块中,代码带详细注释,易懂易用:
' 自定义函数1:按单元格背景色 求和' 参数1:sum_range 要计算求和的区域(如A2:A100)' 参数2:color_cell 参照颜色的单元格(如B1,取它的背景色)' 用法:=ColorSum(A2:A100, B1)' ==============================================Function ColorSum(sum_range As Range, color_cell As Range)AsDoubleDim cell As Range ' 循环单元格变量Dim targetColor AsLong' 存储参照单元格的颜色值Application.Volatile ' 自动刷新计算
' 获取参照单元格的背景色(标准填充色,不含条件格式) targetColor = color_cell.Interior.Color' 遍历求和区域的每一个单元格For Each cell In sum_range' 判断:单元格是数值 + 颜色和参照色一致If IsNumeric(cell.Value)And cell.Interior.Color = targetColor Then ColorSum = ColorSum + cell.Value ' 累加数值End IfNext cellEnd Function' ==============================================' 自定义函数2:按单元格背景色 计数' 参数1:count_range 要统计数量的区域(如A2:A100)' 参数2:color_cell 参照颜色的单元格(如B1)' 用法:=ColorCount(A2:A100, B1)' ==============================================Function ColorCount(count_range As Range, color_cell As Range)AsLongDim cell As RangeDim targetColor AsLongApplication.Volatile ' 自动刷新计算 targetColor = color_cell.Interior.ColorFor Each cell In count_range' 只判断颜色一致,不判断数值If cell.Interior.Color = targetColor Then ColorCount = ColorCount +1End IfNext cellEnd Function
代码写完后,关闭 VBA 编辑器,回到 Excel 表格,直接像普通函数一样调用:
=ColorSum(求和区域, 颜色参照单元格)
示例:
=ColorSum(A1:A8, D2)=ColorCount(计数区域, 颜色参照单元格)
示例:
=ColorCount(A1:A8, D2)表格


五、VBA 自定义函数(UDF)核心用法讲解
Function 函数名(参数1 As 类型, 参数2 As 类型) As 返回值类型' 代码逻辑EndFunction
FunctionAs Double/Longcolor_cell.Interior.ColorFor Each cell In 区域Application.Volatile
: 自动刷新计算
IsNumeric(cell.Value)Alt+F11 检查代码位置,重新保存为启用宏的工作簿F9 手动刷新表格,因为EXCEL修改单元格格式不会触发自动重算:3. 不支持【条件格式】的颜色
Alt+F11 插入模块,粘贴代码即可使用颜色求和、颜色计数函数=ColorSum(数据区域, 颜色单元格)、=ColorCount(数据区域, 颜色单元格)学会这篇内容,你已经掌握了 VBA 自定义函数的核心用法,以后遇到 Excel 自带函数解决不了的问题,都可以用 VBA 自定义函数轻松搞定!