ExcelmacrosVBA代码来计算一串数字的平均值

我正在尝试创build一些VB代码来在Excel中创build一个macros。 不过,我只使用Python和Java之前,所以这个全新的,这个问题是我有一个单元格,其中包含所有逗号分隔的数字列表,并存储为一个string,例如12,5,7,9。 这已经从其他地方调整。 我想能够遍历数字列表,将它们分开,将它们转换为整数,然后根据有多less个数据计算它们的平均值。 我想这适用于当前选定的单元格,并显示在下一个单元格的结果。

这是我迄今为止所做的代码。 它不工作,我不能testing它得到运行它所需的错误对象。 任何build议将是伟大的。 谢谢。

Sub CalculateAverage() Dim contents As String Dim cell As Range Dim NumbersArray() As String Set cell = ActiveCell.Select() contents = Range(cell).value NumbersArray = Split(contents, ",") Dim count As Integer Dim lengthOfArray As Integer Dim first As Integer Dim last As Integer first = LBound(NumbersArray) last = UBound(NumbersArray) lengthOfArray = last - first Dim total As Integer Dim value As Integer count = 0 While count <= lengthOfArray total = total + CInt(NumbersArray(count)) count = count + 1 Wend Dim average As Double average = total / count Range("A2").value = average End Sub 

我会用一个用户定义的函数来处理这个问题。 就像是:

 Function CalculateAverage(s As String) As Double Dim v As Variant, i As Long, total As Double v = Split(s, ",") For i = 0 To UBound(v) 'LBound(v) = 0 total = total + v(i) 'VBA will coerce the values to double Next i CalculateAverage = total / (UBound(v) + 1) End Function 

它像这样工作:

在这里输入图像说明

你可以直接从电子表格中使用这个函数,尽pipe它也可以从一个子类中调用。

关于你的代码的一些评论:

1)使用Long而不是Integer 。 整数可能很容易溢出

2除非你有充分的理由使用整数,否则对电子表格的值使用双打更为惯用。

只是一个如何使用Evaluate来达到所需结果的例子

 Sub test() Debug.Print Evaluate("=Average(" & [A1].Value2 & ")") End Sub 

testing

在这里输入图像说明

尝试更改Set cell = ActiveCell.Select() Set cell = Selectioncontents = Range(cell).value to contents = cell.value或者直接删除Set cell = ActiveCell.Select()行并更改contents = Range(cell).value to contents = Selection.value
注意:这将工作在单个单元格被选中时

下面的代码将在列“B”中input所选单个或多个单元的平均值 – 仅单列select:

 Sub CalculateAverage() Dim contents As String Dim cell As Range Dim NumbersArray() As String Dim c As Range Set cell = Selection For Each c In cell contents = c.value NumbersArray = Split(contents, ",") Dim count As Integer Dim lengthOfArray As Integer Dim first As Integer Dim last As Integer first = LBound(NumbersArray) last = UBound(NumbersArray) lengthOfArray = last - first Dim total As Integer Dim value As Integer total = 0 value = 0 count = 0 While count <= lengthOfArray total = total + CInt(NumbersArray(count)) count = count + 1 Wend Dim average As Double average = 0 average = total / count 'Assuming your data is in column "A" average will be entered in column "B" Cells(c.Row, "B").value = average Next c End Sub