Microsoft Lab
全部软件
Excel工作簿与工作表对象(Workbook and Worksheet Object)约 5 分钟

Sales Calculator 销售额计算器

重点内容


适用版本

桌面版通用(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:循环结束后显示结果

代码怎么运行

  1. 准备一份工作簿,每张工作表 B 列放员工姓名、C 列放销售额,第 2~13 行是数据
  2. Alt+F11 打开 VBA 编辑器,Insert›Module,贴入代码
  3. 回到工作表放命令按钮,绑定 Sales_Calculator
  4. 点击按钮,输入员工姓名(比如 "David"),弹窗显示这个人三年的总销售额
📷 画面提示

输入员工姓名后弹出的 MsgBox,显示 "Total sales of David is ..." 这样的总额结果


学完你会

常见错误

  • employee 比较区分大小写,如果工作表里存的是 "David" 但输入 "david",会匹配不到,等于总额显示 0,容易误以为程序有 bug
  • total 声明成 Integer,如果销售额总和超过 Integer 上限(约 3.2 万)会溢出报错,实际使用时建议改成 Long 或 Double 更保险
  • 循环范围写死 2 To 13,如果某张工作表员工数量超过 12 人,多出来的数据不会被算进去

Sources

Blog / Website:

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