MICROSOFT

EP07. “Sum by Color 按字体颜色求和”

首页 Microsoft 工具 Excel · VBA · If Then Statement · EP07
约 4 分钟· #EP07#Excel#If Then Statement
🔒 登录后可标记已读
  • 这篇示范怎么用 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

代码说明

  1. 声明 toReceive(累计待收金额)、i(循环变量)两个 Integer 变量,toReceive 初始化为 0
  2. For i = 1 To 12 循环遍历第一列的 12 行(对应 12 笔贷款)
  3. Cells(i, 1).Font.Color = vbRed 判断第 i 行第 1 列这个单元格的字体颜色是不是红色,vbRed 是 VBA 内建的颜色常量
  4. 符合红色条件(还没收回)的,把这个单元格的金额累加进 toReceive
  5. 循环跑完后用 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:

  1. Sum by Color