取平均分数的VBA错误

我正在尝试从单元格2到19的testing分数,并将其设置为20.但是,当我input代码时,它只打印出#NAME? 。 我该如何解决它,以确保它打印的平均分数?

 Sub Scores() Dim ws As Worksheet Set ws = Worksheets("Sheet3") ws.Activate Dim rngStart As Range Dim rngEnd As Range Set rngStart = Range("A1").Cells(2, 5) Set rngEnd = Range("A1").Cells(19, 5) Dim MidtermAvg As Range Set MidtermAvg = Range(rngEnd.Offset(1, 0), rngEnd.Offset(1, 0)) ' Put in average at the bottom of the range MidtermAvg.Formula = "=AVERAGE(rngEnd:rngStart)" End Sub 

这里是所有排在一列的成绩:

 63 44 87 96 67 82 58 71 61 77 63 30 93 38 89 89 93 93 

您错过了一些工作表参考,
你的公式有一个隐藏在string中的rngStartrngEndvariables。
(VBA如何知道这些variables?)

另外,您需要获取这些范围对象的地址。
这工作:

 Sub Scores() Dim ws As Worksheet Set ws = Worksheets("Sheet3") ws.Activate Dim rngStart As Range Dim rngEnd As Range Set rngStart = ws.Range("A1").Cells(2, 5) Set rngEnd = ws.Range("A1").Cells(19, 5) Dim MidtermAvg As Range Set MidtermAvg = ws.Range(rngEnd.Offset(1, 0), rngEnd.Offset(1, 0)) ' Put in average at the bottom of the range MidtermAvg.Formula = "=AVERAGE(" & rngStart.Address & ":" & rngEnd.Address & ")" End Sub 

我不知道为什么你使用Range("A1") ,然后Cells(r,c)符号来获得范围"E2:E19" 。 如果分数在这个范围内,那么为什么不如下:

 Sub AverageScore() Dim scores As Range Set scores = Range("E2:E" & Range("E2").End(xlDown).Row) Range("E" & scores.End(xlDown).Row).Offset(1, 0) = "Avg: " & Round(WorksheetFunction.Average(scores), 2) End Sub 

注意 – 我已经冒险将平均值舍入到2个小数点,并添加一个标签,结果显示Avg: 71.89但是您可以根据需要进行更改。