Excel VBA平均值如果为零
您好,我最近开始使用VBA编写代码,并希望实现函数“AverageIF” 在链接中,您可以看到B列中有00:00之后的值,我想得到B列的平均值,从B2到B32。 此外,我想把答案放在B33中 我正在编写的第一个代码如下所示,如果:Excel VBA平均值如果为零,excel,vba,average,Excel,Vba,Average,您好,我最近开始使用VBA编写代码,并希望实现函数“AverageIF” 在链接中,您可以看到B列中有00:00之后的值,我想得到B列的平均值,从B2到B32。 此外,我想把答案放在B33中 我正在编写的第一个代码如下所示,如果: noxGem = WorksheetFunction.averageif(Sheet2.Range("B" & beginRow & ":" & "B" & offsetCellNum2), ">0") 在上面的代码中,我假设
noxGem = WorksheetFunction.averageif(Sheet2.Range("B" & beginRow & ":" & "B" & offsetCellNum2), ">0")
在上面的代码中,我假设从B2行到B32行将检查大于0的值。我不知道这是否正确,因为我得到了一个错误:
我的第二个代码出现在这里,这将把平均值放入B33:
Worksheets("Sheet2").Range("B" & offsetCellNum).Value = noxGem
我认为这段代码是有效的,因为我已经将带有这段代码的数据(B2:B32)放入了一个循环中
你们有什么建议来解决问题吗
非常感谢
编辑
我已经发布了我的全部代码,我的道歉!
错误消息=需要错误424对象
Sub averageif_1()
Dim noxValue As Double 'De waarde die je gaat nemen moet een decimaal
getal worden. Single kan ook gebruikt worden
Dim noxCellNumm As String 'Je gaat in de kolom I zoeken per rij van 24 dus
de waarde moet steeds veranderen I2 I3 I4 etc etc..
Dim x As Integer 'Dit geeft voor de 'GEM_Sheet0' aan, in welke rij de data
wordt opgeslagen
counter = 0
offsetCellNum = 2
beginRow = 2
eindRow = 745
Dim noxGem As Double
While counter < 24
Select Case counter
Case Is = 0
x = beginRow
x2 = eindRow
For i = x To x2 Step 24
noxCellNumm = "I" & i
noxValue = Worksheets("Sheet1").Range(noxCellNumm).Value
'Debug.Print strValue
Worksheets("Sheet2").Range("B" & offsetCellNum).Value =
noxValue
offsetCellNum = offsetCellNum + 1
Next
Debug.Print "00:00"
offsetCellNum2 = offsetCellNum - 1
noxGem = WorksheetFunction.averageif(Sheet2.Range("B" &
beginRow & ":" & "B" & offsetCellNum2), ">0")
'noxGem = WorksheetFunction.averageif
'noxGem = WorksheetFunction.averageif(Sheet2.Range("B2:B33"),
"=0")
Debug.Print noxGem
Worksheets("Sheet2").Range("B" & offsetCellNum).Value = noxGem
counter = counter + 1
offsetCellNum = 2
beginRow = beginRow + 1
Case Else
counter = 100
End Select
Wend
End Sub
Sub-averageif_1()
尺寸值为双精度
格塔尔·沃登。单根根木条
每辆rij van 24 dus在德科洛姆一号左肯的Dim noxCellNumm作为字符串“Je gaat”
de waarde moet steeds Verandren I2 I3 I4等。。
尺寸x为整数'Dit geeft voor de'GEM_Sheet0'aan,在welke rij de data中
wordt opgeslagen
计数器=0
offsetCellNum=2
beginRow=2
艾恩德罗=745
双色宝石
而计数器<24
选择案例计数器
大小写为=0
x=beginRow
x2=艾德洛
对于i=x至x2步骤24
noxCellNumm=“I”&I
noxValue=工作表(“表1”)。范围(noxCellNumm)。值
'Debug.Print strValue
工作表(“Sheet2”)。范围(“B”和offsetCellNum)。值=
氮氧化物值
offsetCellNum=offsetCellNum+1
下一个
调试。打印“00:00”
offsetCellNum2=offsetCellNum-1
noxGem=工作表函数平均值If(表2.范围(“B”)和
beginRow&“:”&“B”和offsetCellNum2),“>0”)
'noxGem=WorksheetFunction.averageif
'noxGem=工作表函数.averageif(表2.范围(“B2:B33”),
"=0")
调试。打印noxGem
工作表(“Sheet2”).Range(“B”)和offsetCellNum.Value=noxGem
计数器=计数器+1
offsetCellNum=2
beginRow=beginRow+1
其他情况
计数器=100
结束选择
温德
端接头
如果声明了所有变量,代码将更易于调试。
将Option Explicit
放在代码顶部,以强制执行此操作
要使这种情况始终发生,请在“工具/选项”下选择该选项:
如果您这样做了,您可能会在
平均值中找到,如果
行被标记为未声明的变量,并且在活动工作簿中没有具有该代码名的工作表(不同于工作表名)。错误消息是什么?您希望我们如何将您的数据复制到工作表中进行测试?什么是offsetCellNum2
?顺便说一句,由于您没有提供足够的信息来重现错误,所以您的代码在这里工作正常。您好@RonRosenfeld,感谢您查看我的代码,并对没有提供足够的信息和数据表示歉意!我已经编辑了我的帖子=)!错误是什么?@RonRosenfeld在运行错误消息时显示“error 424 Object Required”。当我点击查看更多信息时,我的averageIF行以黄色突出显示。谢谢!!你说得对,“Sheet2”是工作表的名称,而不是代码名
乐意帮忙。如果我的回答满足您的问题,如果您能将其标记为已接受,我将不胜感激。你可以阅读更多信息。很高兴=)!再次感谢!