![]() |
Сравнение списка VBA
Всем доброго времени суток.
Стоит задача для сравнения большого списка в Excel. Алгоритм понимаю, как это выразить в VBA не представляю понятия. Так вот. Имеется столбец с фамилиями А и три столбца с фамилиями B, С, D. Необходимо все фамилии из столбца А сравнить со столбцами фамилий B C D, если фамилия из А не встречается ни в одном из столбцов B C D, то записать эту фамилию в столбец E. Формулами я знаю как это сделать, но хочется сделать это именно через VBA, т.к. список огромный. |
Не вполне понятен Ваш алгоритм. Приложите образец рабочей книги.
|
Грубо говоря, есть таблица
Иванов Петров Сидоров Берем Иванова, сравниваем с первым столбцом других фамилий, если там его нет, то начинаем сравнивать с следующим столбцом, если и там его нет, то сравниваем с третьим столбцом, если там его нет, то записываем Иванов в четвертый столбец. В противном случае начинаем перебирать следующую фамилию - Петров. И так проверяем все фамилии столбца: Иванов Петров Сидоров Формулой в Excel я это делаю так. Считаю количество вхождений ячейки А2 в первый диапазон.(лист Апрель от A2:A42734) =(СЧЁТЕСЛИ(Апрель!A2:A42734;Январь!A2)) Затем =(СЧЁТЕСЛИ(Март!A2:A42734;Январь!A2)) Затем =(СЧЁТЕСЛИ(Февраль!A2:A42734;Январь!A2)) Ну а потом просто, фильтрую по 0 все три столбца, вот они мои люди, которые не входят ни в один диапазон. Но мне надо это делать например нажатием кнопки. |
includer-test, Вам сложно приложить образец рабочей книги? Мне гораздо больше времени потребуется, чтобы воссоздать её вид вручную. И это не гарантирует её точного вида, такого же, как у Вас.
|
Вложений: 1
Приношу извинения.
Не стал грузить весь файл, т.к. там личная информация, да и строк там более 48 т. Поэтому подготовил свой пример, в котором все понятно. Файл 100513 |
includer-test,
А если у Вас в столбце А - Иванов Иван Иваныч, а в столбце B - Иванов Иван Ильич, а в столбце C - Иванов Иван Кузьмич. Фамилии одинаковые, а Имена и Отчества могут быть разные... и как сравнивать: подряд, перебирая все 3 столбца по строке, или поочереди - сравнивая со вторым столбцом, потом с третьим и потом с четвертым столбцами. ps: пример сохранили бы в более раннем формате - не открывается он у меня. |
Вложений: 1
Если имя и/или отчество не совпадает со всеми тремя столбцами, то записать в столбец с результатом, это мы как раз и ищем.
Сравнивать думаю лучше перебирая ФИО из первого столбца поочереди с каждым столбцом. Если будет четкое совпадение, то выходить из перебора и брать следующую ФИО. Пересохранил...Файл 100535 |
Вложений: 1
includer-test, для формата *.xls (97/2003) работает в лучшем виде такой код (запрос исключения из запроса на объединение):
Код:
Option Explicit К сожалению, мне никак не удалось из-под Microsoft Excel 2003 добиться корректной работы непосредственно с форматом *.xlsx/*.xlsm (2007/2010) — аналогичный запрос там попросту не срабатывал. Если хотите попробовать сами поиграться — вот Вам ссылки на строку подключения для нового провайдера и на самого провайдера (если у Вас новый Microsoft Office — то сей провайдер должен был устанавливаться в комплекте): Excel 2007 Connection String Samples - ConnectionStrings.com Download Microsoft Access Database Engine 2010 Redistributable from Official Microsoft Download Center |
Цитата:
Включаем запись, вбиваем формулу в нужный столбец и дважды жмем на правый нижний угол ячейки с формулой. Сделается автозаполнение по всем данным, пусть их хоть сотни тысяч. Жмем остановить запись макроса и получаем готовый код. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Время: 20:46. |
Время: 20:46.
© OSzone.net 2001-