我对 VBA 和编程非常陌生。我需要计算 MS Access 列中一行中的值相对于前一个值减少的次数。我创建了一个带有对话框的 Access 表单,其中显示了 VBA 代码的输出。以下是该程序的示例:
因此,对于包含条目的列的以下快照:[23, 34, 22, 55, 65, 34, 77, 24, 30, 29]。该列的预期程序的输出(在表单对话框中)是 4,因为列中的值比前一个值减少了 4 倍。
我能想到的唯一方法是假设您知道行的正确顺序,这涉及(在逻辑意义上)其他一些单调递增的列。假设是 Field1,即主键。那么这样的事情就可以了:(lv = left-val, rv = right-val)
select
lv.Field2 as HigherVal
, rv.Field2 as LowerVal
from MyTable as lv
inner join MyTable as rv
on lv.Field1 = rv.Field1 + 1
where
lv.Field2 > rv.Field2
or to get counts...
select
count()
from MyTable as lv
inner join MyTable as rv
on lv.Field1 = rv.Field1 + 1
where
lv.Field2 > rv.Field2
如果您没有单调的 Field1,则必须添加一个排名字段(排名 1、2、3、4...)来建立数据的正确顺序,并且这样做时没有间隙它。
通常我会尽量不回答
OP
没有尝试过任何事情的问题,但在这种情况下我会例外:
.
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
变量中。