Excel VBA AverageIF Ноль - PullRequest
       8

Excel VBA AverageIF Ноль

0 голосов
/ 29 сентября 2018

Здравствуйте. Я недавно начал программировать на 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 голосов
/ 29 сентября 2018

Ваш код будет легче отлаживать, если вы объявите все свои переменные.Поставьте Option Explicit в верхней части кода, чтобы принудительно это сделать.

Чтобы это происходило постоянно, в разделе Инструменты / Параметры выберите этот параметр:

enter image description here

Если бы вы сделали это, вы могли бы обнаружить, что Sheet2. в вашей строке AverageIf помечено как необъявленная переменная, и что с этим CodeName нет рабочего листа (отличного отWorksheetName) в вашей активной рабочей книге.

...