VBA Access循环:如何编写IF语句判断当前与前一条记录的±10%价格波动
如何遍历Recordset并比较当前记录与前一条记录的数值变化?
问题描述
我需要遍历一个Recordset,判断相邻记录的价格是否存在±10%的显著变化。目前遇到的问题是不知道如何引用前一条记录,也没法实现当前记录与前一条的数值比较。
以下是我的Recordset示例:
| Month_Year | Price |
|---|---|
| 01.2019 | 112.85 |
| 02.2019 | 145.25 |
| 03.2019 | 147.45 |
现有代码框架如下:
rs1.MoveFirst Do Until rs1.EOF ******** 此处需帮助:IF rs1.currentrecord???? / rs1.previousrecord???? 在0.9到1.1之间 THEN rs1.Edit rs1!Comments = "Check if Index is correct" rs1.Update End If rs1.MoveNext Loop
解决方案
我来帮你搞定这个问题!核心思路是用变量存储前一条记录的价格值,因为Recordset移动后没法直接便捷地引用前一条记录(反复调用MovePrevious会增加循环复杂度)。具体实现步骤如下:
- 声明一个变量缓存上一条记录的价格
- 单独处理第一条记录(它没有前置记录,直接保存价格即可)
- 从第二条记录开始,拿当前价格和缓存的前一条价格计算变化率,判断是否超出±10%范围
- 每次循环结束后更新缓存的价格,为下一次比较做准备
修改后的完整代码如下:
Dim previousPrice As Double rs1.MoveFirst ' 处理第一条记录,保存价格后直接移动到下一条 If Not rs1.EOF Then previousPrice = rs1!Price rs1.MoveNext End If Do Until rs1.EOF Dim currentPrice As Double currentPrice = rs1!Price ' 判断价格变化幅度是否超过±10% ' 比值不在0.9~1.1之间,说明变化显著 If (currentPrice / previousPrice < 0.9) Or (currentPrice / previousPrice > 1.1) Then rs1.Edit rs1!Comments = "Check if Index is correct" rs1.Update End If ' 更新缓存的价格,准备下一次比较 previousPrice = currentPrice rs1.MoveNext Loop
关键说明
- 用
previousPrice变量缓存上一条价格,避免反复移动Recordset指针,既简洁又提升效率 - 第一条记录没有前置记录,所以单独跳过判断逻辑,直接保存价格
- 判断条件用
Or覆盖了“涨幅超10%”和“跌幅超10%”两种情况,确保所有显著变化都能被检测到
内容的提问来源于stack exchange,提问作者user11521926
相关产品推荐
相关产品推荐

