You can use Excel builtin formulas for this, something like :
Sub Compute_Range()
Dim rng As Range
With Sheets("Sheet1")
Set rng = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
Debug.Print rng.Address
.Cells(9, 4).Value = Application.Average(rng)
.Cells(10, 4).Value = Application.StDev(rng)
End With
End Sub
Sub Compute_1D_Array()
Dim Arr
Arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Debug.Print "Average = " & Application.Average(Arr)
Debug.Print "Stdev = " & Application.StDev(Arr)
End Sub
However if you want to use your existing UDF, the sub should be changed to something like this :
Sub Compute()
Dim rng As Range
Dim Arr() As Single
Dim Average As Single
Dim Std_Dev As Single
With Sheets("Sheet1")
Set rng = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
Debug.Print rng.Address
ReDim Arr(1 To rng.Rows.Count)
End With
For i = 1 To UBound(Arr)
Arr(i) = rng.Cells(i)
Next i
Average = Mean(Arr)
Std_Dev = StdDev(Arr)
Sheets("Sheet1").Cells(9, 4) = Average
Sheets("Sheet1").Cells(10, 4) = Std_Dev
End Sub
Bookmarks