EP07. “Sum by Color 按字体颜色求和”
🔒 登录后可标记已读- 这篇示范怎么用 VBA 判断单元格的字体颜色,只对符合颜色条件的单元格求和
- 场景是追踪 12 笔贷款:已收回的用黑色字体显示,未收回的用红色字体显示,程序只把红色字体的金额加总
- 前置知识:
For循环和If Then判断 - 学完能理解怎么读取单元格的格式属性(而不只是值)来做条件判断
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
完整 VBA 代码
Dim toReceive As Integer, i As Integer
toReceive = 0
For i = 1 To 12
If Cells(i, 1).Font.Color = vbRed Then
toReceive = toReceive + Cells(i, 1).Value
End If
Next i
MsgBox "Still to receive RM" & toReceive
代码说明
- 声明
toReceive(累计待收金额)、i(循环变量)两个Integer变量,toReceive初始化为 0 - 用
For i = 1 To 12循环遍历第一列的 12 行(对应 12 笔贷款) - 用
Cells(i, 1).Font.Color = vbRed判断第i行第 1 列这个单元格的字体颜色是不是红色,vbRed是 VBA 内建的颜色常量 - 符合红色条件(还没收回)的,把这个单元格的金额累加进
toReceive - 循环跑完后用
MsgBox弹窗显示还需要收回的总金额
怎么运行
Alt + F11 打开 VBA 编辑器,把代码放进按钮点击事件,按 F5 或点命令按钮执行,会弹窗显示 "Still to receive RM[金额]"。
学完你会
- ✅ 会用
Font.Color = vbRed判断单元格的字体颜色 - ✅ 会只对符合颜色条件的单元格累加求和
- ✅ 理解按视觉格式判断的写法有局限,格式跟数据状态没同步会出错
常见错误
- 用
Font.Color判断颜色时,如果单元格字体颜色不是标准的vbRed(比如用了自定义 RGB 值调出来的近似红色),= vbRed判断不出来,会漏算——颜色比对要用完全一致的颜色值 - 这种按「视觉格式」判断的写法本质上是脆弱的:只要有人手动改了字体颜色但忘记同步业务状态(比如钱已经收到了但没把颜色改回黑色),程序算出来的结果就会跟实际情况不一致
Cells(i, 1)里的行列是写死的(固定检查第 1 列、1~12 行),换了工作表结构或数据行数要记得同步改这两个数字,不会自动适应
Sources
Blog / Website: