MICROSOFT

EP09. “Complex Calculations 复杂数列计算”

首页 Microsoft 工具 Excel · VBA · Loop · EP09
约 6 分钟· #EP09#Excel#Loop
🔒 登录后可标记已读
  • 这篇示范怎么用 For 循环搭配 StepSelect Case,计算一个数学级数的各项值和总和
  • 并让使用者选择「计算全部项」还是「只计算奇数项」
  • 前置知识:EP04 的 Step 关键字和 EP02(If Then Statement 分类)的 Select Case
  • 学完能理解怎么把使用者的选项(下拉选单/输入值)转换成循环的步长参数

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


数列公式

这篇计算的数列第 k 项定义为:

Tk = (k² + 6k + 1) / (9k + 7)

例如:T1 = (1 + 6 + 1) / (9 + 7) = 8/16 = 0.5,T2 = (4 + 12 + 1) / (18 + 7) = 17/25 = 0.68。


完整 VBA 代码

Dim i As Integer, term As Integer, N As Integer, stepSize As Integer
Dim sumType As String

i = 0
N = Range("C2").Value
sumType = Range("C3").Value

Range("A8:B1000").Value = ""
Range("C6").Value = ""

Select Case sumType
    Case "All"
        stepSize = 1
    Case "Odd"
        stepSize = 2
End Select

For term = 1 To N Step stepSize
    Cells(8 + i, 1).Value = term
    Cells(8 + i, 2).Value = (term ^ 2 + (6 * term) + 1) / ((9 * term) + 7)
    Range("C6").Value = Range("C6").Value + Cells(8 + i, 2).Value
    i = i + 1
Next term

代码说明

  1. 声明 i(结果写入行数的计数器)、term(当前项数 k)、N(要计算到第几项,从 C2 读取)、stepSize(循环步长)、sumType("All" 或 "Odd",从 C3 读取)
  2. 先清空 A8:B1000 结果区域和 C6 总和格,避免上次运行留下的旧数据干扰
  3. Select Case 判断 sumType:选 "All" 就每项都算(stepSize = 1),选 "Odd" 就只算奇数项(stepSize = 2
  4. For term = 1 To N Step stepSize 按算出来的步长遍历项数
  5. 每一项:A 列写入项数 term,B 列用公式算出 Tk 的值,同时把这一项的值累加进 C6(累计总和)
  6. i = i + 1 让下一项的结果往下一行写,避免覆盖

怎么运行

在 C2 输入要计算到第几项(比如 10)、C3 输入 "All" 或 "Odd",Alt + F11 打开 VBA 编辑器执行代码(或点命令按钮),A8 往下会列出每一项的项数和数值,C6 显示总和。


学完你会

  • ✅ 会用 Select Case 把使用者的文字选项转换成 Step 的步长数字
  • ✅ 会用 For ... Step 按指定步长遍历数列项数
  • ✅ 理解重复运行前要先清空结果区域,避免新旧数据混在一起

常见错误

  • C3 的 sumType 拼写要跟 Select Case 里的 "All"/"Odd" 完全一致(区分大小写习惯但 VBA 字符串比较预设不分大小写,不过多余空格或拼错单词依然会导致两个 Case 都不命中,stepSize 会维持默认值 0,造成无限循环或运行时错误)
  • 忘记先清空 A8:B1000 和 C6,重复运行时新旧结果会混在一起,尤其项数变少时,旧的多余行不会被清掉
  • 运算符优先级容易漏加括号,比如 term ^ 2 + 6 * term + 1 虽然 VBA 会照数学运算顺序算(先乘方、再乘法、最后加法)结果是对的,但为了跟公式对照清楚,建议像范例一样把每一部分用括号区隔开来

Sources

Blog / Website:

  1. Complex Calculations