【发布时间】:2018-09-29 11:11:13
【问题描述】:
您好,我最近开始使用 VBA 编写代码,并希望实现函数“AverageIF”。
在链接中,您可以看到 B 列中有 00:00 之后的值,我想获得 B 列的平均值,从 B2 到 B32。 此外,我想将答案放在 B33 中。
我正在工作的第一个代码在这里可以看到,这将获得 AverageIF:
noxGem = WorksheetFunction.averageif(Sheet2.Range("B" & beginRow & ":" & "B" & offsetCellNum2), ">0")
在上面的代码中,我假设将检查 B2 行到 B32 行的值是否大于 0。我不知道这是否是正确的表示法,因为我收到了一个错误:
我的第二个代码在这里看到,这会将averageIF放在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
【问题讨论】:
-
错误信息是什么?您希望我们如何将您的数据复制到工作表中进行测试?
offsetCellNum2是什么? -
顺便说一句,由于您没有提供足够的信息来重现您的错误,因此做了一堆假设,您的代码在这里可以正常工作。
-
您好@RonRosenfeld,感谢您查看我的代码,并为没有提供足够的信息和数据而道歉!我已经编辑了我的帖子 =)!
-
错误是什么?
-
@RonRosenfeld 运行时错误消息是“需要错误 424 对象”。当我单击以获取更多信息时,我拥有 averageIF 的行以黄色突出显示。