EP09. “Complex Calculations 复杂数列计算”
🔒 登录后可标记已读- 这篇示范怎么用
For循环搭配Step和Select 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
代码说明
- 声明
i(结果写入行数的计数器)、term(当前项数 k)、N(要计算到第几项,从 C2 读取)、stepSize(循环步长)、sumType("All" 或 "Odd",从 C3 读取) - 先清空 A8:B1000 结果区域和 C6 总和格,避免上次运行留下的旧数据干扰
- 用
Select Case判断sumType:选 "All" 就每项都算(stepSize = 1),选 "Odd" 就只算奇数项(stepSize = 2) For term = 1 To N Step stepSize按算出来的步长遍历项数- 每一项:A 列写入项数
term,B 列用公式算出Tk的值,同时把这一项的值累加进 C6(累计总和) 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: