"Проблема в том, что когда я запускаю свой код, он удаляет мою последнюю дублирующую строку ..."
Проблема в порядке сортировки ваших данных.
Remove Duplicates
перемещается от первого индекса к последнему и сохраняет первое вхождение. Поэтому вам нужно либо отсортировать данные так, чтобы ваш «самый старый» дубликат был первым вхождением сверху, либо использовать другой метод для удаления дубликатов.
»- это проблема вмой код или действительно большой Excel просто такой большой? "
Это может быть и то и другое, но одно можно сказать наверняка, ваш код может определенно работать быстрее.
Низко зависающийпоставить Application.EnableScreenUpdating = False
в начале вашего саб. Это мешает Excel обновлять экран при запуске. Это будет иметь огромное значение. Просто не забудьте снова установить его на True
.
Вы также просматриваете диапазон по одной строке за раз, но я не вижу какой-либо конкретной причины, почему вам это нужно. Вы можете скопировать диапазон while в одном операторе без зацикливания. Вам даже не нужно копировать вас, не заботясь о порядке форматирования, вы можете передать значения, просто сделав диапазоны равными друг другу.
Пример того, как вы можете передавать значения без обрезки или зацикливания
Worksheets("two").Range("A2:A" & lastrow).Value = Worksheets("one").Range("E2:E" & lastrow).Value
Вы можете использовать тот же подход с копированием и вставкой, если хотите.