保持GPA的平均值不出现div / 0错误

基本上我是说,从所有四个学期的平均值开始,如果Sem 4的平均值是“0”或者有一个#div / 0的错误,那么只要sem 3的平均值,如果sem 3 avg是0或#div / 0那么就拿sem 1-2平均数

我已经得到了一个点,我得到的错误信息“无法获得工作表函数类的平均属性”。


Sub sem1avg() If w = 0 Then Worksheets("Sheet1").Range("H1") = "N/A" ElseIf w > 0 Then Application.WorksheetFunction.Average (Range("B2:B10")) End If End Sub Sub sem2avg() If x = 0 Then Call sem1avg ElseIf x > 0 Then Worksheets("Sheet1").Range.cell(H1) = _ Application.WorksheetFunction.Average(B11, B23) End If End Sub Sub sem3avg() If y = 0 Then Call sem2avg ElseIf y > 0 Then Worksheets("Sheet1").Range(H1) = _ Application.WorksheetFunction.Average(B11, B23, E11) End If End Sub Sub sem4avg() Dim w As Long Dim x As Long Dim y As Long Dim z As Long w = Worksheets("Sheet1").Range("B11") x = Worksheets("Sheet1").Range("B23") y = Worksheets("Sheet1").Range("E11") z = Worksheets("Sheet1").Range("E23") If z = 0 Then Call sem3avg ElseIf z > 0 Then Worksheets("Sheet1").Range("H1") = _ Application.WorksheetFunction.Average("B11, B23, E11, E23") End If End Sub 

当然你可以使用AGGREGATE()函数:

 =AGGREGATE(1,6,B11,E11,B23,E23) 

AGGREGATE()函数在2010年被引入来处理这个特定的问题。 第一个标准告诉我们要平均的函数,第二个标准告诉公式排除错误。 三是范围。

![在这里输入图片描述

为了处理0和错误这个公式将做到这一点:

 =SUM(IF(ISNUMBER(B11),B11),IF(ISNUMBER(B23),B23),IF(ISNUMBER(E11),E11),IF(ISNUMBER(E23),E23))/SUM(IF(ISNUMBER(B11),IF(B11>0,1)),IF(ISNUMBER(B23),IF(B23>0,1)),IF(ISNUMBER(E11),IF(E11>0,1)),IF(ISNUMBER(E23),IF(E23>0,1))) 

在这里输入图像说明

发生了不止一件事,迄今为止还没有人碰到这一切。

你需要传递你的论点。

您需要正确使用“平均”function

您还需要将您的variables更改为Single,Long会向上舍入或向下舍入,这会使结果变得糟糕。

这是一个如何解决这个问题的例子:

 Sub sem3avg(ByVal w As Single, ByVal x As Single, ByVal y As Single) If y = 0 Then Call sem2avg ElseIf y > 0 Then Worksheets("Sheet1").Range("H1").Value = Application.WorksheetFunction.Average(w, x, y) End If End Sub Sub sem4avg() Dim w As Single Dim x As Single Dim y As Single Dim z As Single w = Worksheets("Sheet1").Range("B11") x = Worksheets("Sheet1").Range("B23") y = Worksheets("Sheet1").Range("E11") z = Worksheets("Sheet1").Range("E23") If z = 0 Then Call sem3avg(w, x, y) ElseIf z > 0 Then Worksheets("Sheet1").Range("H1").Value = Application.WorksheetFunction.Average(w, x, y, z) End If End Sub 

Application.WorksheetFunction.Average函数不能像那样工作。 相反,你需要传递一堆数字,如下所示:

 Application.WorksheetFunction.Average(w,x,y,z) 

https://msdn.microsoft.com/en-us/library/office/ff836809.aspx