Делать при двух условиях - PullRequest
       4

Делать при двух условиях

0 голосов
/ 08 ноября 2018

У меня есть цикл Do While:

Sub TEST_LOOP()
Dim i As Integer
i = 2

Do While Cells(i, 3) <> "" And _
Int(Mid(Cells(i, 3), 12, 2)) = 21
    Value = Value + Cells(i, 4)
    i = i + 1
Loop

End Sub

Что применяется к этому основному набору данных: enter image description here

Я получаю сообщение об ошибке:

"Ошибка времени выполнения '13': несоответствие типов.

Проблема возникает потому, что когда цикл достигает первой пустой ячейки (i = 7) тогда функция Int применяется к пустому значению Mid(Cells(i, 3), 12, 2 ничего не дает). Поэтому мне было интересно, существует ли эффективный способ выхода из цикла, если рассматриваемая ячейка не удовлетворяет двум условиям, то есть она не пуста и включает в себя 21 час.

1 Ответ

0 голосов
/ 08 ноября 2018

Сначала необходимо проверить, является ли значение ячейки датой, а затем продолжить. Посмотрите, поможет ли это:

Sub TEST_LOOP()

    Dim i As Long, ws As Worksheet
    Set ws = ActiveSheet

    For i = 2 To lastRow(ws, "C")
        If isDate(ws.Cells(i, 3)) Then

            If Int(Mid(ws.Cells(i, 3), 12, 2)) = 21 Then

                Value = Value + ws.Cells(i, 4)

            End If

        End If
    Next i

End Sub

Function lastRow(ws As Worksheet, Optional col As Variant = 1) As Long
    With ws
        lastRow = .Cells(.Rows.Count, col).End(xlUp).Row
    End With
End Function

Проблема заключается в том, что в операторе IF() или Do While оценивается все , даже если предыдущий оператор возвращает FALSE. Поэтому вам нужно сначала проверить, является ли ваша ячейка датой, прежде чем продолжить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...