【问题标题】:Excel VBA AverageIF ZeroExcel VBA 平均IF 零
【发布时间】: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 的行以黄色突出显示。

标签: excel vba average


【解决方案1】:

如果您声明了所有变量,您的代码会更容易调试。 将Option Explicit 放在代码顶部以强制执行此操作。

要一直发生这种情况,请在工具/选项下选择该选项:

如果您这样做了,您可能会发现 AverageIf 行中的 Sheet2. 被标记为未声明的变量,并且在您的活动工作簿。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多