保持GPA的滚动平均值而不会出现div / 0错误

时间:2016-05-10 19:36:46

标签: excel vba excel-vba

基本上我是说,从所有4个学期的平均值开始,如果Sem 4平均值为“0”或者有#div / 0错误那么只需要sem 1-3平均值,如果Sem 3 avg为0或# div / 0然后只需要sem 1-2 average等。

我已经明白我收到错误消息“无法获取工作表函数类的平均属性。”

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

3 个答案:

答案 0 :(得分:1)

发生了不止一件事,到目前为止还没有人能够完成所有这些事情。

你需要传递你的论据。

您需要使用'平均值'功能正常

您还需要将变量更改为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

答案 1 :(得分:1)

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

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

AGGREGATE()函数于2010年推出,用于解决此特定问题。第一个标准告诉我们想要平均值的函数,第二个标准告诉公式排除错误。第三个是范围。

enter image description here

要处理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)))

{{3}}

答案 2 :(得分:0)

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

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

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