重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
场景:澳大利亚居民所得税税率表
| 应税收入 | 税率 |
|---|---|
| RM0 - RM6,000 | 无税 |
| RM6,001 - RM35,000 | 超过 RM6,000 部分的 15% |
| RM35,001 - RM80,000 | RM4,350 + 超过 RM35,000 部分的 30% |
| RM80,001 - RM180,000 | RM17,850 + 超过 RM80,000 部分的 38% |
| RM180,001 以上 | RM55,850 + 超过 RM180,000 部分的 45% |
完整 VBA 代码
Dim income As Double
Dim tax As Double
income = Round(Range("A2").Value)
Range("A2").Value = income
Select Case income
Case Is >= 180001
tax = 55850 + 0.45 * (income - 180000)
Case Is >= 80001
tax = 17850 + 0.38 * (income - 80000)
Case Is >= 35001
tax = 4350 + 0.3 * (income - 35000)
Case Is >= 6001
tax = 0.15 * (income - 6000)
Case Else
tax = 0
End Select
Range("B2").Value = tax代码说明
- 声明
income、tax两个Double(双精度浮点数,能存小数)变量 - 用
Round把 A2 的收入值四舍五入成整数,再写回 A2 - 用
Select Case从最高区间往下判断收入落在哪一档,注意判断顺序是从大到小——因为Select Case只会命中第一个符合的条件,如果从小到大写,所有超过 $6,001 的收入都会先命中最低那一档,后面的判断永远执行不到 - 按对应区间的公式算出税额,写入 B2
计算示例
如果 income 是 37000,落在 RM35,001-RM80,000 这一档: tax = 4350 + 0.3 * (37000 - 35000) = 4350 + 600 = RM4950
怎么运行
Alt+F11 打开 VBA 编辑器,把代码放进按钮点击事件,按 F5 或点命令按钮执行。
学完你会
常见错误
Select Case的区间判断顺序写反(从小到大而不是从大到小),会导致所有高收入都被错误地套用最低档的税率公式- 忘记先用
Round处理收入,如果输入的是带小数的收入,后续计算不会报错但结果会跟税务局实际算法有细微差异 - 税率表的分界值容易抄错(比如 RM35,001 写成 RM35,000),一个数字之差会让整个区间判断错位
Sources
Blog / Website: