如何求一个范围的平均值



我想对B4开始的条目进行平均。告诉我代码中应该更改的内容。我是vba的新手。

Range("F13").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=AVERAGE(Range(Range("B4").End(xlDown)))"

编辑:在这种情况下,它是如何工作的?

Range("F17").Select
Application.CutCopyMode = False
Range("F17").Formula = "=IF(COUNT(R[-13]C[-2]:R[-10]C[-2])=0,10^99,COUNT(" & Range(Range("D4"), Range("D4").End(xlDown)).Address & ")"  

如果你的目标是在单元格中有实际的公式(因此如果工作表上的值发生变化,它会自动更新(,那么你可以这样做:

Sub test()
Dim rgStart As Range, rgStop As Range, rg As Range
Set rgStart = Range("B4")
Set rgStop = rgStart.End(xlDown)
Set rg = Range(rgStart, rgStop)
Range("F13").Formula = "=AVERAGE(" & rg.Address & ")"
End Sub

这是一种更整洁的方法(代码更多,但更容易理解(。

这是相同的代码,但更多的是";"紧凑":

Sub test()
Range("F13").Formula = "=AVERAGE(" & Range(Range("B4"), Range("B4").End(xlDown)).Address & ")"
End Sub

如果你实际上不想在单元格中使用公式(所以它是一个静态值(,你仍然可以用Application.WorksheetFunction调用工作表AVERAGE函数,比如:

Sub test()
Dim rgStart As Range, rgStop As Range, rg As Range
Set rgStart = Range("B4")
Set rgStop = rgStart.End(xlDown)
Set rg = Range(rgStart, rgStop)
Range("F13") = Application.WorksheetFunction.Average(rg)
End Sub

并且再次;"压实":

Sub test()
Range("F13") = Application.WorksheetFunction.Average(Range(Range("B4"), Range("B4").End(xlDown)))
End Sub

最新更新