Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2012, 17:18   #1
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию Макрос аля ВПР для формирования свода из закрытых книг

Добрый день, уважаемые эксперты!
Потеряв на поиск аналогичного решения уйму времени, вынужден просить Вашей помощи в написании макроса - аналога функции ВПР, только с расширенным функционалом (указание книги для поиска). Задача довольно банальна - создать свод, но данные должны вытягиваться из нескольких закрытых книг. Пусть у нас есть несколько книг в папке (только те что в папке анализируются макросом), путь к которой мы указываем в начале выполнения макроса. Запустив макрос в книге "Свод", он ищет данные в книге, наименование которой указано в столбце "A", и возвращает значение ячейки по указанному в столбце "B" Показателю и Столбцу, указанному в диапазоне C8:F8. Заранее премного благодарен даже за совет!
Вложения
Тип файла: rar Свод_МВ.rar (27.0 Кб, 71 просмотров)
MaxxVer вне форума Ответить с цитированием
Старый 22.08.2012, 17:23   #2
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

И еще скажу что наименование листа во всех книгах одинаковое, в коде макроса можно указать как "Книга1".
MaxxVer вне форума Ответить с цитированием
Старый 22.08.2012, 18:39   #3
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Может быть я хочу многого... Эта задача вообще решаема?
MaxxVer вне форума Ответить с цитированием
Старый 22.08.2012, 18:43   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

элементарная задача, просто, пока она ни кому не интересна, наберитесь терпения (мир не без добрых фей) и (или) продолжайте поиски.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.08.2012, 18:50   #5
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Понял. Это обнадеживает. Я верю в мир и в добрых людей).
MaxxVer вне форума Ответить с цитированием
Старый 22.08.2012, 20:37   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Было немного интересно
Не интересно прописывать код выбора папки - попробуйте сами, если нужно. Сейчас берётся папка из папки книги с макросом.
Ну и лень было буквы
D E H I
кодом менять на цифры - просто замените их на листе на
3 4 7 8
Если это напрягает - нужно в код добавить список соответствий или код преобразования.

Ну и почему "аля"? Вуаля
Код:
Sub tt()
    Dim cc As Range, r As Range
    Set r = [c8:f8]

    For Each cc In [a9:a16]
        cc.Offset(, 2).Formula = "=VLOOKUP(" & cc.Offset(, 1).Address(0, 0) & ",'" & ThisWorkbook.Path & "\Данные\[" & cc.Value & ".xlsx]Лист1'!$B:$I," & r(1) & " ,0)"
        cc.Offset(, 3).Formula = "=VLOOKUP(" & cc.Offset(, 1).Address(0, 0) & ",'" & ThisWorkbook.Path & "\Данные\[" & cc.Value & ".xlsx]Лист1'!$B:$I," & r(2) & " ,0)"
        cc.Offset(, 4).Formula = "=VLOOKUP(" & cc.Offset(, 1).Address(0, 0) & ",'" & ThisWorkbook.Path & "\Данные\[" & cc.Value & ".xlsx]Лист1'!$B:$I," & r(3) & " ,0)"
        cc.Offset(, 5).Formula = "=VLOOKUP(" & cc.Offset(, 1).Address(0, 0) & ",'" & ThisWorkbook.Path & "\Данные\[" & cc.Value & ".xlsx]Лист1'!$B:$I," & r(4) & " ,0)"
    Next
End Sub
Ну и в конце, если нужно, можно кодом заменить формулы на полученные значения:
Код:
 [c9:f16] = [c9:f16].Value
Версия 2 (модернизированная, но "те же яйца", но короче):
Код:
Sub ttt()
    Dim cc As Range, r As Range, i As Byte

    Set r = [c8:f8]
    Application.ScreenUpdating = False

    For Each cc In [a9:a16]
        For i = 1 To 4
            cc.Offset(, i + 1).Formula = _
            "=VLOOKUP(" & cc.Offset(, 1).Address & ",'" _
            & ThisWorkbook.Path & "\Данные\[" & cc.Value _
            & ".xlsx]Лист1'!$B:$I," & r(i) & " ,0)"
        Next
    Next

    [c9:f16] = [c9:f16].Value
    Application.ScreenUpdating = True
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 22.08.2012 в 21:37.
Hugo121 вне форума Ответить с цитированием
Старый 23.08.2012, 09:33   #7
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Спасибо огромное!
MaxxVer вне форума Ответить с цитированием
Старый 23.08.2012, 11:22   #8
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Уважаемый Hugo121, подскаажите пожалуйста, как дописать код так, чтобы можно было еще выбирать имя лиса из диапазона (к примеру добавить столбец
B и вставить туда названия листов)?
MaxxVer вне форума Ответить с цитированием
Старый 23.08.2012, 11:47   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Видите в коде cc.Value - это в формулу подставляется имя книги (по этому столбцу идёт перебор ячеек).
Если нужно добавить ещё и имя листа, то замените в строке ".xlsx]Лист1'!$B:$I," слово Лист1 например на " & cc.Offset(, 1).Value & " - это если имя листа будет левее имени книги.
Ну и остальное чуть скорректировать вероятно придётся, если столбцы будут двигаться.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 23.08.2012, 13:01   #10
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Еще раз спасибо! Все получилось.
MaxxVer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для формирования таблицы Wind-up Bird Microsoft Office Excel 0 12.11.2011 23:51
Получение данных из множества закрытых книг книг hardkain Microsoft Office Excel 1 27.09.2011 20:18
Макрос для формирования прайса Петро1 Microsoft Office Excel 3 01.08.2011 20:42
Макрос для формирования списка OscarWilde Microsoft Office Excel 5 26.12.2010 15:27
копирование листов из закрытых книг mephist Microsoft Office Excel 4 10.07.2009 17:18