Excel VBA计算一列的平均值

我想计算一列的平均值,并把下面的值。
我在VBA中编写了这个代码,但返回的值始终为0。

Sub Macro4() ' ' Macro4 Macro ' ' Keyboard Shortcut: Ctrl+Shift+C Dim sum As Integer Dim count As Integer count = 0 sum = 0 Do While ActiveCell.Value <> "" ActiveCell.Offset(1, 0).Activate sum = sum + ActiveCell.Value count = count + 1 Loop ActiveCell.Value = sum / count ActiveCell.Offset(0, 5).Select Selection.End(xlUp).Select Selection.End(xlUp).Select End Sub 

正如@Tahbaza所指出的,除非你的ActiveCell位于行的顶端,否则它只会从列中的行开始计数。

你的代码也有一个错误,因为它不会在循环的第一次迭代中计数活动单元,所以这个值将会从平均值中漏掉。

我已经在下面的一组代码中解决了这两个问题,但是如果不是以下的build议,还会有其他改进(即不使用Select )。

 Sub Macro4() ' ' Macro4 Macro ' ' Keyboard Shortcut: Ctrl+Shift+C Dim sum As Integer Dim count As Integer count = 0 sum = 0 Selection.End(xlUp).Select '<---Go to the top of the range Do While ActiveCell.Value <> "" sum = sum + ActiveCell.Value count = count + 1 ActiveCell.Offset(1, 0).Activate '<---Move down *after* you done the sumcount Loop ActiveCell.Value = sum / count ActiveCell.Offset(0, 5).Select Selection.End(xlUp).Select Selection.End(xlUp).Select End Sub 

你可以用一行代码来达到你想要的结果,如下所示。 这假设您希望平均的单元格是连续的,并且没有空单元格。 它也假定你的值从工作表的第一行开始, 并且至less有两行值

 Sub ColumnAverage() Cells(1, ActiveCell.Column).End(xlDown).Offset(1, 0).Value = Application.WorksheetFunction.Average(ActiveSheet.Columns(ActiveCell.Column)) End Sub 

编辑:事实上,如果你想不需要一个静态值,但可以在列的最后一个单元格中使用工作表函数公式。 它有点野兽,但如果你分解它应该是有道理的:

 Sub ColumnAverageFormula() Cells(1, ActiveCell.Column).End(xlDown).Offset(1, 0).Formula = "=Average(" & Cells(1, ActiveCell.Column).Address(0, 0) & ":" & Cells(1, ActiveCell.Column).End(xlDown).Address(0, 0) & ")" End Sub