私はvbaにかなり慣れていないので、vbArraysでこの問題を解決できないようです。生活を楽にするために、vba で関数 cumsum を作成しました。ただし、関数と範囲の両方のバリアントを渡すことができるように、コードを柔軟にしたいと考えています。私のコードでは、範囲を渡す場合に vec=vec.value という行を追加すると、完全に正常に動作しますが、関数を呼び出して範囲外の型を渡すと機能したい場合は機能しません. 私が気づいたのは、コードに vec=vec.value という行がなく、範囲を渡すと、次元が 0 になり、独自の関数を作成してチェックしたことです。誰かが私にこの問題を解決する方法を説明してもらえますか? ありがとう。
Public Function cumsum(vec As Variant) As Variant
Dim temp() As Variant
MsgBox (getDimension(vec))
'works if i use vec=vec.value if vec is a range but has 0 if i do not vec = vec.values
ReDim temp(LBound(vec, 1) To UBound(vec, 1), 1 To 1) As Variant
Dim intCounter As Integer
For intCounter = LBound(vec) To UBound(vec)
If intCounter = LBound(vec) Then
temp(intCounter, 1) = vec(intCounter, 1)
Else
temp(intCounter, 1) = temp(intCounter - 1, 1) + vec(intCounter, 1)
End If
Next
cumsum = temp()
End Function
Function getDimension(var As Variant) As Integer
On Error GoTo Err:
Dim i As Integer
Dim tmp As Integer
i = 0
Do While True:
i = i + 1
tmp = UBound(var, i)
Loop
Err:
getDimension = i - 1
End Function