Microsoft Lab
全部软件
Excel条件判断(If Then Statement)约 4 分钟

Sum by Color 按字体颜色求和

重点内容


适用版本

桌面版通用(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(比如用了自定义 RGB 值调出来的近似红色),= vbRed 判断不出来,会漏算——颜色比对要用完全一致的颜色值
  • 这种按「视觉格式」判断的写法本质上是脆弱的:只要有人手动改了字体颜色但忘记同步业务状态(比如钱已经收到了但没把颜色改回黑色),程序算出来的结果就会跟实际情况不一致
  • Cells(i, 1) 里的行列是写死的(固定检查第 1 列、1~12 行),换了工作表结构或数据行数要记得同步改这两个数字,不会自动适应

Sources

Blog / Website:

  1. Sum by Color
只记在你的浏览器里,换设备不会同步。