Удаление целых строк с помощью if, если имеется более 2 дубликатов - PullRequest
0 голосов
/ 08 февраля 2019

BeforeAfter

Это, наверное, что-то простое, что я просмотрел, но думаю, мне нужны свежие взгляды.Я установил формулу, которая устанавливает дубликаты: «K» для сохранения или «D» для удаления.Он работает нормально, если есть только 2 дубликата, но если их 3 или более, он удалит только 1 дубликат, оставляя остальные.Любая помощь будет высоко ценится!

Set wsl = ActiveWorkbook.Worksheets(1)
lr = wsl.Range("A" & wsl.Rows.Count).End(xlUp).Row

For d = 2 To lr
    If wsl.Range("J" & d).Value Like "*D*" Then
       wsl.Range("J" & d).EntireRow.Delete
Else
End If
Next d

1 Ответ

0 голосов
/ 08 февраля 2019

При удалении строк следует начинать с конца и двигаться к вершине.Вам просто нужно изменить цикл For, начинающийся с

For d = lr to 2 Step -1

. Если вы используете F8 для пошагового выполнения кода, то заметите, что при удалениистрока, эта строка под ним становится «текущей строкой».Затем ваш код сразу переходит к строке next , не проверяя ту, которую вы вывели.

Работа от конца до начала позволяет избежать этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...