Страница 1 из 1

Макрос найти/заменить

Добавлено: 20 янв 2007, 01:16
Davidoff
Доброй ночи товарищи.
Есть небольшая задачка, с которой мне спровиться сложно в силу невладения VBA. А решить ее нужно обязательно средствами Excel.

Итак, есть две таблицы - Book1 и Book2. В Book1, допустим один столбец значений - АА, в Book2 - 2 столбца АА и ВВ. Необходимо скопировать ячейку А1 из Book1, найти это значение в Book2 в столбце АА, скопировать соответствующее ему значение из столбца ВВ и вставить это значение в В1 в книге Book1. И так далее А2, А3.... Аn до конца списка (или указанное количество циклов). При ненахождении значения в Book2, пропустить эту ячейку и продолжить со следующей.

Заранее спасибо за помощь

Re: Макрос найти/заменить

Добавлено: 20 янв 2007, 01:50
Pavel55
хм, а функция =ВПР точно не подойдёт ?))

Re: Макрос найти/заменить

Добавлено: 20 янв 2007, 06:26
Avsha
1. Имеем две книги
book1.xls
book2.xls
и надстройку r1_r2_sopost.xla,
ее кладем в C:\Documents and Settings\user_01\Application Data\Microsoft\AddIns
и подключаем меню Сервис\Надстройки

2. При активной book1.xls с помощью панели инструментов надстройки r1_r2_sopost
указываем (выделяем диапазон и нажимаем кнопку Name_r1 и Name_r2 соответственно) два диапазона с именем:
Name_r1(в книге book1.xls) - содержит значения для поиска
Name_r2(в книге book2.xls) - содержит справочник, место поиска

3. Встаем на свободное необходимое место на листе (в книге book1.xls) и
выполняем команду (нажимаем кнопку) "Сопоставление".
При этом Макрос надстройки копирует формулы сопоставления диапазонов Name_r1 и Name_r2 (в формулах используется функция ВПР)
в указанный диапазон. Происходит сопоставление значений.

Код: Выделить всё

------------------------------------------
=ЕСЛИ(ЕОШИБКА(ВПР(ИНДЕКС(Name_r1;1;1);Name_r2;1;0));"";ВПР(ИНДЕКС(Name_r1;1;1);Name_r2;1;0))
=ЕСЛИ(ЕОШИБКА(ВПР(ИНДЕКС(Name_r1;1;1);Name_r2;2;0));"";ВПР(ИНДЕКС(Name_r1;1;1);Name_r2;2;0))
...
=ЕСЛИ(ЕОШИБКА(ВПР(ИНДЕКС(Name_r1;2;1);Name_r2;1;0));"";ВПР(ИНДЕКС(Name_r1;2;1);Name_r2;1;0))
=ЕСЛИ(ЕОШИБКА(ВПР(ИНДЕКС(Name_r1;2;1);Name_r2;2;0));"";ВПР(ИНДЕКС(Name_r1;2;1);Name_r2;2;0))
------------------------------------------
и.т.д. в соответствии с количеством строк Name_r1 и столбцов Name_r2


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


Примечание:
1.При отсутствии искомого значения в диапазоне Name_r2 происходит замена значением "".
2.При отсутствии значения, соответсвующего искомому (а1 -есть, а b1-пустая ячейка)
выдается 0 - это особенность функции ВПР.
3.При наличии нескольких искомых значений значений в диапазоне Name_r2 - берется 1-ое.

Re: Макрос найти/заменить

Добавлено: 20 янв 2007, 15:06
Davidoff
Avsha,
Спасибо, дружище!!

Re: Макрос найти/заменить

Добавлено: 05 фев 2008, 10:22
gruzdev_f
замечательное решение!

а такой вопрос, а как сделать в обратную сторону?

тоесть чтоб в итоговом массиве были только те записи которые отсутствуют в первом файле но присутствуют во втором?(из 2х списков должников за 2 соседних месяца вытащить тех кто в первом месяце оплатил и отсутствует во втором файле)

как получить разницу двух файлов?