Vba Excel удалить дубликаты
Обновлено: 21.11.2024
Используйте метод VBA RemoveDuplicates для удаления повторяющихся строк из столбцов в Excel. Метод RemoveDuplicates — это умный способ упростить диапазон данных.
Я только что вернулся из замечательной поездки в Ирландию, поэтому я собираюсь использовать небольшие данные по Ирландии, чтобы продемонстрировать, как удалять повторяющиеся данные из диапазона.
Если вы предпочитаете работать с массивами, а не с диапазонами, ознакомьтесь с моим руководством, в котором я научу вас, как удалять дубликаты из массива.
Пример — VBA RemoveDuplicates
Удалить строки с повторяющимися значениями в одном столбце
В этом примере удаляется вся строка из диапазона, если значение в третьем столбце повторяется. Продолжайте следовать этому руководству, чтобы понять, как адаптировать код к своему проекту.
Создавайте мощные макросы с помощью нашего бесплатного комплекта разработчика VBA
Такой макрос легко скопировать и вставить, но создать его самостоятельно сложнее. Чтобы помочь вам создавать макросы, подобные этому, мы создали бесплатный комплект разработчика VBA и написали Большую книгу макросов Excel VBA, полную сотен готовых макросов, которые помогут вам освоить файловый ввод-вывод, массивы, строки и многое другое. скопируйте ниже.
Учебное пособие — VBA RemoveDuplicates
Допустим, у вас есть список самых густонаселенных городов Ирландии. Список выглядит примерно так, с названием города, округа и населения:
Вместо того, чтобы перечислять самые густонаселенные города всей страны Ирландии, вы хотите найти самые густонаселенные города в каждом округе.
Обычно вы просматриваете все данные в третьем столбце и удаляете все строки с повторяющимся округом после появления первого экземпляра. Например, вы хотите удалить строки 8 и 18 (ранг 7 и 17), поскольку графство Дублин уже присутствует в строке 2 (ранг 1). Точно так же вы хотите удалить строку 19 (ранг 18), поскольку графство Килдэр уже указано в строке 16 (ранг 15).
Это именно то, что делает приведенный выше пример макроса RemoveDuplicates. Он начинается в верхней части 3-го столбца, столбца округа, и удаляет все последующие дубликаты в этом столбце. У вас остался более короткий список, содержащий самый большой город в каждом округе — все менее населенные города были удалены, поскольку названия округов в менее населенных городах были дубликатами. Это работает, потому что данные уже отсортированы по населению.
Вот список ирландских городов, дубликаты которых были удалены с помощью метода RemoveDuplicates:
Обратите внимание, что список стал короче. Да, некоторые города пересекают несколько округов, поэтому пример не самый лучший, но вы поняли.
Подробнее об удалении дубликатов VBA
Применение удаления дубликатов
Функция RemoveDuplicates должна применяться к определенному диапазону. В моем примере макроса я определил переменную MyRange и установил ее равной данным в столбцах A:D .
Ваш диапазон не обязательно должен быть определен как отдельная переменная. Следующий пример сработал бы так же хорошо:
Предупреждение: как только вы запустите макрос для диапазона с аргументом RemoveDuplicates, повторяющиеся данные исчезнут навсегда. Вы не сможете отменить его и вернуть обратно, не воссоздав данные самостоятельно.
Удалить повторяющиеся аргументы
Метод RemoveDuplicates принимает 2 аргумента:
Первый аргумент, Столбцы, является обязательным, и именно в него вы помещаете столбцы, содержащие дублирующуюся информацию, которую вы хотите очистить. Обратите внимание, я сказал столбцы во множественном числе.
Если у вас есть несколько столбцов, которые вы хотите проверить, вы должны ввести первый аргумент, используя функцию Array, например:
В этом примере я проверяю третий и пятый столбцы. Если оба столбца содержат повторяющуюся информацию, строка данных будет удалена из диапазона.
Второй аргумент, заголовок, является необязательным аргументом со значением по умолчанию xlNo. Вот как вы сообщаете методу RemoveDuplicates, содержат ли ваши данные строку заголовка или нет. Допустимые значения: xlYes, xlNo и xlGuess. Это довольно очевидно, не так ли?
Идеи для приложений
В этом руководстве я привел пример того, как составить список самых густонаселенных городов Ирландии и объединить его в список самых густонаселенных городов в каждом графстве Ирландии.
Я видел, как люди используют RemoveDuplicates VBA для проверки списков, импортированных из нескольких источников. Предположим, у вас есть список имен и адресов электронной почты из двух разных CSV-файлов. Вы хотите объединить их в одну, но хотите, чтобы каждая запись появлялась только один раз.
Для этого скопируйте оба списка в Excel — один поверх другого — и используйте метод RemoveDuplicates для проверки обоих столбцов и удаления повторяющихся записей.
Подпишитесь на нашу серию электронных писем VBA Insiders, чтобы получить дополнительные советы, приемы и тактики VBA, используя форму ниже. После подписки поделитесь тем, что вы автоматизируете, в Twitter и Facebook.
Готовы делать больше с VBA?
Мы собрали гигантский PDF-файл с более чем 300 готовыми макросами и хотим, чтобы вы получили его бесплатно. Введите свой адрес электронной почты ниже, и мы вышлем вам копию вместе с нашим комплектом разработчика VBA, полным советов, приемов и ярлыков VBA.
Прежде чем мы начнем, я хочу сообщить вам, что мы разработали набор шпаргалок по VBA, чтобы вам было проще писать лучшие макросы. Мы включили более 200 советов и 140 примеров макросов, поэтому в них есть все, что вам нужно знать, чтобы стать лучшим программистом VBA.
Повторяющиеся значения часто не требуются в Excel, особенно если вы хотите учитывать уникальные значения. Обычно у нас есть другой набор данных для работы, и мы видим в нем множество повторяющихся значений.
Как удалить повторяющиеся значения в кодировании VBA?
Чтобы сначала удалить повторяющиеся значения, нам нужно указать диапазон, на который мы ссылаемся. Затем мы можем получить доступ к методу «Удалить дубликаты». Таким образом, синтаксис будет следующим.
[Столбец]: Какой столбец выбора нам нужно удалить дубликаты? Нам нужно указать номер столбца выбранного диапазона.
[Заголовок]: выбранный вами диапазон имеет заголовки или нет. Здесь у нас есть три варианта работы.
- xlYes: если у данных есть заголовки, вы можете выбрать это.
- xlNo: если у данных нет заголовков, вы можете выбрать это.
- xlGuess: этот параметр позволит Excel угадывать заголовки данных.
Таким образом, используя эти параметры, мы можем удалять дубликаты одним нажатием кнопки, не напрягая при этом усилий.
Примеры удаления повторяющихся значений в кодировании VBA
Ниже приведены примеры удаления дубликатов в значениях VBA.
Рассмотрите приведенные ниже данные и для этого примера.
Из приведенных выше данных нам нужно удалить дубликаты столбца «Регион», поэтому выполните следующие шаги, чтобы написать код.
Шаг 1. Запустите подпроцедуру, дав коду макроса имя.
Шаг 2. Укажите диапазон данных с помощью объекта VBA Range.
Код:
Шаг 3. После упоминания метода доступа к диапазону VBA «RemoveDuplicates».
Код:
Шаг 4. Первый аргумент столбца, в котором нужно удалить повторяющиеся значения. В этом примере из первого столбца нам нужно удалить дубликаты.
Код:
Шаг 5. Далее нужно определить, есть ли у данных заголовки. В данном случае у нас есть заголовки, поэтому выберите «xlYes».
Код:
Запустите этот код. Это удалит дубликаты VBA из выбранного региона.
Это явный способ ссылки на диапазон ячеек. Если вы хотите выбрать диапазон самостоятельно, а затем удалить дубликаты, то нам нужно использовать переменную для работы. В приведенном ниже примере я покажу вам, как использовать переменные в VBA.
В приведенном выше примере мы специально указали диапазон ячеек. Теперь мы увидим, как работать с выделением собственных ячеек.
Например, у меня есть несколько наборов данных, как показано на изображении ниже.
Каждый раз я не могу явно указать диапазон ячеек, поэтому мы будем назначать выделение как диапазон.
Шаг 1. Объявите переменную как Range.
Код:
Шаг 2. Диапазон – это объект. Мы установим диапазон в качестве нашего выбора.
Код:
Шаг 3. Теперь вместо диапазона ячеек мы можем использовать переменную «rng».
Код:
Прежде чем мы запустим код, нам нужно сначала выбрать диапазон ячеек. Затем мы можем удалить дубликаты из выбранного диапазона ячеек.
Например, посмотрите на пример изображения данных.
У нас есть повторяющиеся значения в первом и четвертом столбцах. Итак, мы удалим из этих столбцов. Используйте приведенный ниже код для VBA, чтобы удалить дубликаты.
Код:
Вы можете скачать эту программу Excel для удаления дубликатов VBA здесь. Шаблон VBA для удаления дубликатов Excel
Рекомендуемые статьи
Это руководство по удалению дубликатов VBA. Здесь мы узнаем, как удалить повторяющиеся значения в Excel VBA вместе с примерами и загрузим шаблон Excel. Ниже приведены некоторые полезные статьи Excel, связанные с VBA –
Я пытаюсь удалить дубликаты в Excel 2013 VBA. но я получаю сообщение об ошибке "объект не поддерживает это свойство или метод". Проблема в том, что у меня нет статического диапазона для выбора. Я хочу удалить дубликаты из заголовка столбца 'abcd'.
К вашему сведению, фраза "Это не сработало" не поможет нам вам помочь. Для достижения наилучших результатов вы должны предоставить сообщения об ошибках/обновленный код и т. д.
3 ответа 3
Вы должны сообщить методу Range.RemoveDuplicates, какой столбец использовать. Кроме того, поскольку вы указали, что у вас есть строка заголовка, вы должны сообщить об этом методу .RemoveDuplicates.
Похоже, исходный код хотел удалить дубликаты из одного столбца, игнорируя окружающие данные. Этот сценарий нетипичен, и я включил окружающие данные, чтобы процесс .RemoveDuplicates не искажал ваши данные. Опубликуйте комментарий, если вы действительно хотите изолировать процесс RemoveDuplicates в одном столбце.
Спасибо за ответ. Я хочу, чтобы дубликаты также удалялись из окружающих данных. Но ваш код не сработал. Я получаю эту ошибку "Ошибка, определяемая приложением или объектом" в этой строке. RemoveDuplicates Columns:=icol, Header:=xlYes
Вот почему выборочные данные так важны. Я использовал .Cells(1, 1).CurrentRegion, чтобы быстро получить блок данных, так как многие люди просто начинают с A1 и строят его вдоль и поперек. Кажется, что нет, поскольку между A1 и любой ячейкой, содержащей 'abcd', должны быть пустые столбцы и/или строки. Поскольку вы не хотите предоставлять образцы данных, обратитесь к свойству Range.CurrentRegion за информацией о том, как вы можете настроить код для своих целей.
Да, но вам нужно знать начальную ячейку. Знание начального и конечного ряда также сделало бы его более эффективным. Функции рабочего листа могут производить подсчет либо в VBA, либо на рабочем листе в виде стандартной формулы.
Ниже мы рассмотрим программу в Excel VBA, которая удаляет дубликаты.
В столбце А у нас есть 10 чисел. Мы хотим удалить дубликаты из этих номеров и поместить уникальные номера в столбец B.
<р>1. Сначала мы объявляем четыре переменные. toAdd типа Boolean, uniqueNumbers типа Integer, i типа Integer и j типа Integer.
<р>2. Затем мы записываем первый номер столбца A в столбец B, поскольку первый номер всегда «уникальный». <р>3. Мы инициализируем две переменные. Мы только что добавили одно число в столбец B, поэтому мы инициализируем uniqueNumbers со значением 1. Мы устанавливаем для toAdd значение True, предполагая, что следующее число также необходимо добавить (конечно, это не обязательно верно).Нам нужно определить, является ли второе число «уникальным» или нет. Это можно сделать очень простым способом. Только если число еще не находится в столбце B, второе число необходимо добавить в столбец B.
<р>4. Нам также нужно проверить это для третьего числа, четвертого числа и так далее. Для этого мы запускаем цикл For Next. <р>5. Теперь самая важная часть программы. Если второе число равно одному из чисел в столбце B (пока у нас есть только одно уникальное число), мы устанавливаем toAdd в False, потому что в этом случае мы не хотим добавлять это число! (это не "уникально"). На данный момент uniqueNumbers по-прежнему равен 1, но uniqueNumbers может быть целым списком. Чтобы проверить весь этот список, нам нужен еще один цикл For Next.Опять же: если число, которое мы хотим добавить, равно одному из чисел в этом списке, для toAdd будет установлено значение False, и число не будет добавлено. Добавьте следующие строки кода: <р>6. Только если toAdd по-прежнему имеет значение True и не установлено значение False, Excel VBA должен добавить число в столбец B. В то же время мы увеличиваем uniqueNumbers на 1, потому что теперь у нас есть еще одно уникальное число. Следующие строки кода выполняют свою работу:If toAdd = True Then
Cells(uniqueNumbers + 1, 2).Value = Cells(i, 1).Value
uniqueNumbers = uniqueNumbers + 1
End If
Читайте также: