Слишком много 'Withing' и 'Ifing'
Правила
Количество With
операторов должно быть равно количеству End With
операторов.
Количество операторов If
должно быть равно количеству операторов End If
, за исключением случаев, когда существует «однострочный» оператор If .
Insights
Решение Алексея C получает эти With
-s и If
-s встрока, но проблемы все еще остаются.
Когда вы пишете With .Range("R" & i)
, это относится к Sheets("Savings Q4")
из предыдущего оператора With
, и вы фактически сокращаете строку
With Sheets("Savings Q4").Range("R" & i)
, которая OK .
Когда вы позже напишите With .Range("B" & i)
, это не относится к Sheets("Savings Q4")
, это относится к .Range("R" & i)
, т.е. вы не сокращаете строку With Sheets("Savings Q4").Range("B" & i)
, но
With Sheets("Savings Q4").Range("R" & i).Range("B" & i)
, что НЕПРАВИЛЬНО .
Matteo NNZ правильно прокомментировал, что операторы If
могут быть сокращены до одного оператора If
с использованием And
оператор.
Когда вы пишете
Sheets("Savings Q4").Range("G:G").Copy_
Destination:=Sheets("Cifas Loadings").Range("A:A")
, вы копируете весь столбец G
во весь столбец A
.Поскольку это в цикле (For i = 1 to LR
), каждый раз, когда код встречает " Январь " и " Да ", он копирует столбец весь ,Крайне маловероятно, что вы пытаетесь достичь этой функциональности.
План изменений
- Избавьтесь от «внутренних»
With
. - Уменьшите
If
, используя And
. - Измените КОЛОННА диапазонов
G:G
и A:A
на соответствующие CELL диапазоны. - Избавьтесь от
Destination:=
.
Код
Sub WithIf()
Dim LR As Long, i As Long
With Sheets("Savings Q4")
LR = .Range("R" & Rows.Count).End(xlUp).Row
For i = 1 To LR
If .Range("R" & i).Value = "Y" And _
.Range("B" & i).Value = "January" Then
.Range("G" & i).Copy Sheets("Cifas Loadings").Range("A" & i)
End If
Next i
End With
End Sub
Остальные проблемы
Еще одна проблема может заключаться в том, чтоВы не хотели, чтобы данные столбца A
копировались в ту же строку, что и данные столбца G
.В этом случае вы должны применить ту же логику LR = .Range("R" & Rows.Count).End(xlUp).Row
и интегрировать ее в код, ссылающийся на столбец A
листа "Загрузка Cifas".