首先,由于您使用的是 Excel VBA,因此无需使用任何特殊代码来计算数组的平均值。你可以使用WorksheetFunction.Average
Option Explicit
Sub Question1()
Dim a() As Variant ' has to be a variant array, since that's what the `Array` function returns.
Dim i As Integer
Dim summ As Integer
Dim avg As Double
a = Array(12, 9, 8, 12, 16, 19, 3, 2, 5, 20)
avg = Excel.WorksheetFunction.Average(a)
MsgBox "Average is: " & avg
End Sub
如果您希望您的代码更便携(即不必依赖 Excel 的工作表函数),那么我建议您将平均计算拆分为一个单独的函数,您可以使用任何数组和任何基数调用。要计算数组的长度,您需要同时使用LBound 和UBound,如文档中的here:
n = UBound(a) - LBound(a) + 1
当然,假设 a 是一个数组,这将始终有效,无论您的数组是从 0 开始、从 1 开始还是完全不同的数组。
由于无论如何您都在遍历数组以获取总和,因此您也可以使用该循环来获取长度。像这样的:
Option Explicit
' assuming that arr is an array containing things we can sum, to get an average.
Public Function ArrayAverage(arr As Variant) As Double
Dim n As Long, sum As Double
Dim i As Long
n = 0: sum = 0
For i = LBound(arr) To UBound(arr)
n = n + 1
sum = sum + arr(i)
Next i
ArrayAverage = sum / n
End Function
Public Sub Question1()
Dim a() As Variant, avg As Double
a = Array(12, 9, 8, 12, 16, 19, 3, 2, 5, 20)
avg = ArrayAverage(a)
MsgBox "Average is: " & avg
End Sub