使用VBA

时间:2017-11-28 15:21:54

标签: vba ms-access for-loop while-loop do-while

我对VBA和编程很新。我需要计算值从MS Access coloumn中的行中的前一个值减少的次数。我创建了一个Access窗体,其中包含一个显示VBA代码输出的对话框。以下是该计划的一个例子:

所以对于下面带有条目的coloumn的快照:[23,34,22,55,65,34,77,24,30,29]。此coloumn的预期程序的输出(在表单对话框中)为4,因为coloumn中的值比前一个值减少了4倍。

Example

2 个答案:

答案 0 :(得分:0)

我能想到的唯一方法是假设你知道行的正确排序,这涉及(在逻辑意义上)一些单调增加的列。假设是Field1,主键。那么这样的事情就可以了:( lv = left-val,rv = right-val)

--no-single-branch

如果您没有单调的Field1,您必须添加一个排名字段(排名1,2,3,4 ......),以确定数据的正确顺序,并且这样做没有间隙。

答案 1 :(得分:0)

通常我尽量不回答OP没有尝试任何问题的问题,但在这种情况下我会例外:

  1. 尝试将列转换为数组。
  2. 获得数组后,只需循环遍历:
  3. Option Explicit
    
    Public Sub TestMe()
    
        '2
        Debug.Print CountDecrements(Array(1, 2, 3, 2))
    
        '-1,-3, 5
        Debug.Print CountDecrements(Array(1, -1, -3, 100, 101, 5))
    
    End Sub
    
    Public Function CountDecrements(myArray As Variant) As Long
    
        Dim k               As Double
        Dim previousValue   As Double
        Dim result          As Long
    
        For k = LBound(myArray) To UBound(myArray)
            If k = LBound(myArray) Then
                previousValue = myArray(k)
            Else
                If previousValue > myArray(k) Then result = result + 1
                previousValue = myArray(k)
            End If
        Next k
    
        CountDecrements = result
    
    End Function
    

    CountDecrement()函数只计算前一个值小于当前值的次数。结果保存在result变量中。