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

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Davidoff
Сообщения: 2
Зарегистрирован: 20 янв 2007, 00:56

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

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

Заранее спасибо за помощь
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

хм, а функция =ВПР точно не подойдёт ?))
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

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-ое.
Вложения
Books.zip
(27.67 КБ) 261 скачивание
Davidoff
Сообщения: 2
Зарегистрирован: 20 янв 2007, 00:56

Avsha,
Спасибо, дружище!!
gruzdev_f
Сообщения: 1
Зарегистрирован: 05 фев 2008, 09:44

замечательное решение!

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

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

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