Excel VBA实战|新手也能会!自定义函数一键实现单元格颜色求和+计数(附完整代码)
- 2026-10-30 06:06:37
这篇文章用VBA 自定义函数解决这个痛点,零基础也能学会,写完函数后,能像 SUM、AVERAGE 一样直接在单元格里调用,简单高效!
一、核心知识点
- VBA 自定义函数(UDF)
:自己写的 Excel 函数,可在单元格直接使用,重复调用 - 按颜色求和
:根据指定单元格的背景色,对目标区域数值求和 - 按颜色计数
:统计目标区域中,与指定颜色一致的单元格数量
二、第一步:打开 VBA 编辑器(新手必看)
打开你的 Excel 表格 按下快捷键 Alt + F11,直接打开 VBA 编辑器右键左侧工作表名称 → 插入 → 模块 右侧空白区域,就是我们写代码的地方
注意:保存文件时请选择 .xlsm 格式(启用宏的工作簿),否则 VBA 代码会丢失!
三、完整 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
四、第二步:在 Excel 单元格中直接使用(超简单)
代码写完后,关闭 VBA 编辑器,回到 Excel 表格,直接像普通函数一样调用:
1. 按颜色求和
=ColorSum(求和区域, 颜色参照单元格)
示例:
对 A1:A8 区域中,和 D2 颜色一样的单元格求和 公式:E2 =ColorSum(A1:A8, D2)
2. 按颜色计数
=ColorCount(计数区域, 颜色参照单元格)
示例:
统计 A1:A8 区域中,和 D2 颜色一样的单元格数量 公式:F2 =ColorCount(A1:A8, D2)
实际演示效果
表格


五、VBA 自定义函数(UDF)核心用法讲解
1. 什么是自定义函数(UDF)?
全称:User Defined Function(用户自定义函数) 作用:扩展 Excel 自带函数,实现自带函数做不到的功能 特点: 写一次,全表可用 单元格直接调用,和 SUM/VLOOKUP 用法一致 支持自动重算(修改颜色 / 数值后自动更新)
2. 自定义函数标准结构
Function 函数名(参数1 As 类型, 参数2 As 类型) As 返回值类型' 代码逻辑EndFunction
Function:声明自定义函数 As Double/Long:指定函数返回值类型(数值 / 整数) 函数名:自己定义(建议见名知意,如 ColorSum)
3. 关键代码解释
color_cell.Interior.Color:获取单元格背景色的数字代码(Excel 用数字代表颜色) For Each cell In 区域:循环遍历每一个单元格 Application.Volatile: 自动刷新计算IsNumeric(cell.Value):判断单元格内容是不是数字(避免文本干扰求和) 函数最后会自动把计算结果返回给单元格
六、常见问题 & 解决方法
1. 函数显示 #NAME? 错误
原因:代码没放在模块里,或文件名不是 .xlsm 解决:按 Alt+F11检查代码位置,重新保存为启用宏的工作簿
2. 修改颜色后,结果不自动更新
解决:按 F9手动刷新表格,因为EXCEL修改单元格格式不会触发自动重算:3. 不支持【条件格式】的颜色
说明:以上代码只识别手动填充的颜色,不识别条件格式自动变色
七、总结:自定义函数的优势
- 解决 Excel 原生痛点
:自带函数无法按颜色计算,VBA 一键实现 - 零学习成本
:写完后,普通用户不用懂 VBA,直接用公式 - 高效复用
:一个工作簿写一次,所有工作表都能调用 - 灵活扩展
:可修改代码实现按字体颜色求和、按颜色求平均值等
总结
按 Alt+F11插入模块,粘贴代码即可使用颜色求和、颜色计数函数自定义函数(UDF)是 Excel 进阶必备技能,能大幅提升工作效率 公式用法: =ColorSum(数据区域, 颜色单元格)、=ColorCount(数据区域, 颜色单元格)
学会这篇内容,你已经掌握了 VBA 自定义函数的核心用法,以后遇到 Excel 自带函数解决不了的问题,都可以用 VBA 自定义函数轻松搞定!