You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA Access循环:如何编写IF语句判断当前与前一条记录的±10%价格波动

如何遍历Recordset并比较当前记录与前一条记录的数值变化?

问题描述

我需要遍历一个Recordset,判断相邻记录的价格是否存在±10%的显著变化。目前遇到的问题是不知道如何引用前一条记录,也没法实现当前记录与前一条的数值比较。

以下是我的Recordset示例:

Month_YearPrice
01.2019112.85
02.2019145.25
03.2019147.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会增加循环复杂度)。具体实现步骤如下:

  1. 声明一个变量缓存上一条记录的价格
  2. 单独处理第一条记录(它没有前置记录,直接保存价格即可)
  3. 从第二条记录开始,拿当前价格和缓存的前一条价格计算变化率,判断是否超出±10%范围
  4. 每次循环结束后更新缓存的价格,为下一次比较做准备

修改后的完整代码如下:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:42:45