取平均分数的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中的rngStart
和rngEnd
variables。
(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
但是您可以根据需要进行更改。