Option Explicit Option Base 0 Public Function EvalFactorial(ByVal iValue As Integer) As Long If iValue <= 0 Then EvalFactorial = 1 Else EvalFactorial = EvalFactorial(iValue - 1) * iValue End If End Function Public Function EvalRange(ValueArray As Variant) As Variant Dim lCounter As Long Dim Res() As Long On Error GoTo lErrorReDim For lCounter = 0 To UBound(ValueArray) ReDim Preserve Res(lCounter) Res(lCounter) = ValueArray(lCounter) + EvalFactorial(lCounter + 1) Next lCounter EvalRange = Res Exit Function lErrorReDim: ReDim Res(0) Resume Next End Function Sub test() Dim locCounter As Long, Arr(3) As Integer, Res As Variant Dim str As String Arr(0) = -10: Arr(1) = 2: Arr(2) = 5: Arr(3) = 1 Res = EvalRange(Arr) For locCounter = 0 To UBound(Res) If str <> "" Then str = str & vbCr & "#" & CStr(locCounter + 1) & " " & CStr(Arr(locCounter)) & " : " & CStr(Res(locCounter)) Else str = "#" & CStr(locCounter + 1) & " " & CStr(Arr(locCounter)) & " : " & CStr(Res(locCounter)) End If Next locCounter MsgBox str, vbOKOnly + vbInformation End Sub |