Сначала необходимо проверить, является ли значение ячейки датой, а затем продолжить. Посмотрите, поможет ли это:
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
. Поэтому вам нужно сначала проверить, является ли ваша ячейка датой, прежде чем продолжить.