У меня возникли трудности с применением команды If, которую я хочу выполнить для всех строк выбранного диапазона. До сих пор я получил это:VBA - Создать цикл для набора активных ячеек с командой If
Dim x As Integer
NumRows = Range("J2", Range("J2").End(xlDown)).Rows.Count
Range("J2").Select
For x = 1 To NumRows
If ActiveCell.Value = "9995" Then
ActiveCell.Offset(0, 7).Value = ActiveCell.Offset(0, 3).Value
Else: ActiveCell.EntireRow.Delete
End If
ActiveCell.Offset(1, 0).Select
Next
Это, кажется, нет никакой проблемы, выбирая диапазон ячеек от J2 до конца списка данных. У него также нет проблем с поиском ячеек в этом диапазоне, которые содержат «9995», и выполнение команды для копирования данных 3 ячейки вправо от ячейки «9995» и вставки ее в 7 ячеек справа от ячейки «9995». Он даже удаляет всю строку, где значение активной ячейки не является «9995» (это именно то, что я хочу), но только в некоторых случаях. Он оставляет несколько строк, для которых значение активной ячейки не «9995», и я не могу понять, почему.
Может ли кто-нибудь помочь?
Спасибо!
Вы должны иметь в виду, что после удаления строки следующая строка вниз становится активной ячейкой. После удаления команда 'ActiveCell.Offset (1, 0) .Select' выполняется, что означает, что она пропускает строку, так как эта строка уже была выбрана после удаления. –
Следствие комментария Мистера 832 состоит в том, что при удалении лучше удалять петлю назад. – SJR
Спасибо за ввод, оба. Я буду помнить об этом в будущем. – Alex