基本上我是说,从所有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
答案 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年推出,用于解决此特定问题。第一个标准告诉我们想要平均值的函数,第二个标准告诉公式排除错误。第三个是范围。
要处理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