首页 > 解决方案 > Excel VBA 平均IF 零

问题描述

您好,我最近开始在 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

标签: excelvbaaverage

解决方案


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

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

在此处输入图像描述

如果您这样做了,您可能会发现Sheet2.在您的AverageIf行中被标记为未声明的变量,并且在您的活动工作簿中没有具有该CodeName(不同于 WorksheetName)的工作表。


推荐阅读