Обрезка строки по-прежнему удаляет ее на практике. Вы можете убедиться в этом, просто сделав это вручную на электронной таблице. Вы увидите сдвиг в диапазоне, который означает, что это та же проблема, что и удаление строк в al oop. Обычный способ избежать этой проблемы - переключиться на For i
l oop и l oop в обратном направлении.
Поскольку здесь вы на самом деле не удаляете строки, вы также можете попробовать следующее ...
Используя тот же код, вы можете просто скопировать и вставить строку, не вырезать , а затем обведите в кружок и очистите содержимое строк, чтобы оставить пустую строку на месте.
Else
paste_row = o_ws.UsedRange.Rows.Count + 1
n_ws.Rows(Cell.Row).Copy o_ws.Cells(paste_row, 1)
n_ws.Rows(Cell.Row).ClearContents
End If
Next cell
Примечание
Лучшим способом сделать это будет l oop через ваш диапазон и создать Union
( коллекцию ячеек ) которые соответствуют вашим критериям. Как только l oop будет готов, вы можете скопировать, вставить и очистить Union
сразу. Это означает, что у вас есть один экземпляр действий, выполненных на листе, довольно много