Используйте обычные For...Next
l oop и l oop строки:
Dim i as Long
For i = 19 to 500
If IsEmpty(.Range("N" & i).Value) Then Exit Sub
If .Range("O" & i).Value <> Month(Date) Then
.Range("I" & i).Value = "Carried"
ElseIf .Range("S" & i).Value <> "" Then
.Range("I" & i).Value = "Closed"
Else
.Range("I" & i).Value = "Open"
End If
Next
Боковые примечания (как указано в комментариях):
Dim Range As Range
: плохая идея . Не используйте повторно элементы объектной модели в качестве имен переменных. - Если вы не добавляете
.
перед каждым вызовом Range
в l oop, тогда вы не фактически ссылается на With Sheet1
. Dim Today As Date
. Возможно, вы не включили строку в свой вопрос Today = Date
? В любом случае вы можете просто удалить эту переменную и использовать Date
напрямую, т.е. Month(Today)
-> Month(Date)
.
EDIT :
Как обсуждалось в комментариях, вы можете просто использовать здесь формулу и избегать VBA:
=IF(S66<>"","Closed",IF(AND(O66<>"",OR(MONTH(O66)<>MONTH(TODAY()),YEAR(O66)<>YEAR(TODAY()))),"Carried",IF(N66<>"","Open","")))