Excel VBA AverageIF零

时间:2018-09-29 11:11:14

标签: excel vba average

您好,我最近开始在VBA中进行编码,并且想实现功能“ AverageIF”。

Data for my 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

1 个答案:

答案 0 :(得分:0)

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

要始终执行此操作,请在“工具/选项”下选择该选项:

enter image description here

您已完成操作,可能会发现Sheet2.行中的AverageIf被标记为未声明的变量,并且没有具有该 CodeName 的工作表(与活动工作簿中的工作表名称)。