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 = Selection
和contents = 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