Авторизация

Рубрики блога


Рекомендуем



Последние комментарии

Облако тегов


Устами великих

"Странный этот мир, где двое смотрят на одно и то же, а видят полностью противоположное." © Агата Кристи

Реклама



MS Office и VBA Рубрика содержит интересные решения, малоизвестные функции и возможности, надстройки и макросы, в общем, все то, что может сделать вашу работу в пакете программ MS Office (в первую очередь - Excel, Word, Access) более эффективной.
29
Окт

Сопоставление содержимого ячеек Excel посимвольно (макрос)

рейтинг материал 0.0 (0) | количество просмотров 3676 | количество коментариев 0
Как сопоставить содержимое ячеек в эксель отдельными символами и вывести в отдельную ячейку какие символы не совпадают. Возможности встроенных функций ПСТР, ПОИСК и пр. Пользовательский макрос - сопоставление каждого символа через цикл.
Download source

Работая с большими массивами данных в таблицах Excel, рано или поздно, приходится прибегать к сопоставлению содержимого двух и более таких таблиц.

Практически любой аналитик знает о существовании формул ЕСЛИ() или ВПР(), поэтому ему не составляет большого труда сопоставить различные ячейки таблиц или прямыми ссылками или по критериям. В таких ситуацих на просторах интернет еще можно встретить рекомендации по использованию функций СОВПАД(), а для сопоставления по множеству критериев - ИНДЕКС() вместе с ПОИСКПОЗ().

Ситуация осложняется, когда нужно сопоставить значение не целой ячейки, а каждого символа в такой ячейке с аналогичными символами в другой ячейке.

Зачем такое вообще может понадобиться? Самый банальный пример исключение человеческого фактора при заполнении файла:

"Сигарета" - "Cигaрeтa" - визуально эти оба слова выглядят одинаково, но на самом деле это не так и эксель, как и любое другое приложение это поймет. Выделенные буквы во втором слове "Cигaрeтa" написаны латиницей или буквами английского алфавита. Русская буква "С" и английская "C" определяются как различные потому, что для каждой из них есть свое соответсвие ANSI-кодировки

Да, безусловно, Excel обладает вооружением и на такой случай. Арсенал функций ПСТР(), ПОИСК(), ДЛСТР(), ЛЕВСИМВ() и ПРАВСИМВ() помогут разложить любую ячейку на составляющие символы, чтобы затем их сопоставить. Но если перед вами стоит задача сопоставить КАЖДЫЙ символ, то формула будет настолько массивной, что уже при необходимости сопоставить ячейки с 10-тью символами, вы сами безнадежно запутаетесь в логике вложений и условий.

Как быть в таком случае? Здесь бы выручили встроенные функции, которые бы работали по принципу цикла с рядом переменных. Будь бы такие функции они бы очень упростили и облегчили формулу на примере посимвольного сопоставления ячеек.

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


Доступ к исходному коду макроса не закрыт, в коде для простоты понимания добавлены комментарии.

Download source
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]