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