VBA - Удалить дубликаты, которые содержат меньше информации - PullRequest
1 голос
/ 20 апреля 2020

Первый вопрос по стеку, но не мое первое посещение!

По сути, у меня есть огромная база данных Excel (> 24 000 строк, объединенная из разных таблиц), над которой я работал неделями, а теперь я Закончив добавление новых записей, я должен очистить его, удалив много дубликатов.

Массив / таблица структурирована следующим образом:

+---------+-------+--------------------+-------------+--------------------+
| Company | Name  |       Address      |  Phone      |       Email        |
+---------+-------+--------------------+-------------+-----------+--------+
| Baij&Co | Steve | 458 Preston avenue |  4156854789 |  steve@baij&co.com |

Я выполнил поиск с помощью обычных методов но они не совсем отвечают на мою проблему, например:

  • Используя кнопку Excel «Удалить дубликаты», выбрав все столбцы, чтобы убедиться, что я сохраняю только уникальные значения
  • Использование метод фильтрации для выявления дубликатов и последующего их удаления.

Однако моя цель состоит в том, чтобы удалить дубликаты, для которых в данной строке (строках) содержится минимальное количество информации, как показано в этом примере:

+--------- +-------+--------------------+-------------+--------------------+
| Company  | Name  |       Address      |  Phone      |       Email        |
+--------- +-------+--------------------+-------------+--------------------+
| Baij&Co  | Steve |     (blank)        |  4156854789 |  steve@baij&co.com |
| Baij&Co  | Steve |     (blank)        |  (blank)    |  steve@baij&co.com |
| Baij&Co  | Steve | 458 Preston avenue |  4156854789 |  steve@baij&co.com |

Здесь я бы хотел удалить 1-ю и 2-ю строку , так как они содержат меньше информации (пропущенный адрес и номер телефона) о том же контроле действовать. Имеет ли это смысл ..?

Я знаю только основы VBA (например, создание пользовательской формы для добавления нового контакта и ввода введенной информации в нужные ячейки), но я борюсь с продвинутыми алгоритмами.

Я просто знаю, что функцию, связанную с VBA, нельзя настроить, кроме выбора столбцов, в которых я хочу удалить дубликаты:

Sheets("Database").Range("ContactsTable").RemoveDuplicates Columns:=1:15, Header:=xlNo

Есть идеи?

1 Ответ

0 голосов
/ 20 апреля 2020

Спасибо, ребята!

Так что я последовал предложению @Tim Williams (которое на самом деле похоже на предложение Скотта) и сделал следующее:

  • Я понял, что электронная почта адреса были уникальным идентификатором (или первичным ключом), и я должен удалить строки, которые не содержат их (поскольку становится бесполезным иметь файл контакта без контактной информации).

  • I добавил столбец с именем «Количество» и вставил следующую формулу:

    = COUNTIF (N: N; N2)

-> Здесь «N: N» это столбец, содержащий все адреса электронной почты. «N2» - первая ячейка.

  • Затем я отсортировал таблицу по убыванию в столбце «Count», чтобы сначала было наибольшее количество вхождений.

  • Затем воспользовался инструментом «Удалить дубликаты» Excel и выбрал столбец адреса электронной почты.

В результате было удалено 10 000 строк (из 24 000). Одно можно сказать наверняка, эта таблица теперь содержит уникальные файлы контактов на основе адреса электронной почты. Тем не менее, я никогда не узнаю наверняка, сохранялась ли наиболее заполненная строка для каждого контакта, к сожалению (если я не трачу дни на сравнение обеих баз данных, строка за строкой).

Проблема решена, я думаю! Хотя мне было бы интересно, чтобы VBA-скрипт делал то же самое (для изучения аспектов алгоритма), если кто-нибудь что-нибудь о нем знает: -)

Еще раз спасибо!

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