重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
完整代码
Sub Sales_Calculator()
Dim employee As String, total As Integer, sheet As Worksheet, i As Integer
total = 0
employee = InputBox("Enter the employee name (case sensitive)")
For Each sheet In Worksheets
For i = 2 To 13
If sheet.Cells(i, 2).Value = employee Then
total = total + sheet.Cells(i, 3).Value
End If
Next i
Next sheet
MsgBox "Total sales of " & employee & " is " & total
End Sub代码逻辑说明
total = 0:先把累计总额归零employee = InputBox(...):弹出输入框,要求输入员工姓名(注意区分大小写)For Each sheet In Worksheets:外层循环,遍历这份工作簿里的每一张工作表(假设每张工作表代表一年)For i = 2 To 13:内层循环,遍历第 2 到 13 行(假设每张表最多 12 位员工的数据,从第 2 行开始因为第 1 行是标题)If sheet.Cells(i, 2).Value = employee Then:判断第 i 行第 2 列(B 列,员工姓名)是否等于输入的名字total = total + sheet.Cells(i, 3).Value:符合的话,把第 i 行第 3 列(C 列,销售额)加进总额MsgBox "Total sales of " & employee & " is " & total:循环结束后显示结果
代码怎么运行
- 准备一份工作簿,每张工作表 B 列放员工姓名、C 列放销售额,第 2~13 行是数据
- Alt+F11 打开 VBA 编辑器,,贴入代码
- 回到工作表放命令按钮,绑定
Sales_Calculator - 点击按钮,输入员工姓名(比如 "David"),弹窗显示这个人三年的总销售额
输入员工姓名后弹出的 MsgBox,显示 "Total sales of David is ..." 这样的总额结果
学完你会
常见错误
employee比较区分大小写,如果工作表里存的是 "David" 但输入 "david",会匹配不到,等于总额显示 0,容易误以为程序有 bugtotal声明成 Integer,如果销售额总和超过 Integer 上限(约 3.2 万)会溢出报错,实际使用时建议改成 Long 或 Double 更保险- 循环范围写死
2 To 13,如果某张工作表员工数量超过 12 人,多出来的数据不会被算进去
Sources
Blog / Website: