计算平均值的单元格和范围之间的差异

假设细胞内有5个数字103.6, 104.8, 106.2 , 105.7,105.6 [E2:E6] 。 如果我在这5个数字上运行=AVERAGE ,那么我得到105.18

但是,我在VBA的即时窗口中执行以下操作。 我会得到一个不同的答案。

?worksheetfunction.Average(cells(2,"E"), cells(6,"E")) 104.6

但是如果我使用范围而不是单元格,答案是正确的。

?worksheetfunction.Average(range("E2:E6")) 105.18

为什么使用单元格和范围这样的差异来进行如此简单的计算? 这真让我困惑。

原因是因为WorksheetFunction.Average(Cells(2,"E"), Cells(6,"E"))平均只有两个单元格E2E6 。 如果你想获得整个范围的平均值,使用

 WorksheetFunction.Average(Range(Cells(2,"E"), Cells(6,"E"))) 

或者直接使用WorksheetFunction.Average(Range("E2:E6"))

同样为了可靠性,我build议您完全限定您的范围:

 With ThisWorkbook.Worksheets("Sheet1") MsgBox WorksheetFunction.Average(.Range(.Cells(2, "E"), .Cells(6, "E"))) End With