Страницы: 1 2 След.
RSS
Данные из нескольких файлов.
 
Помогите пожалуйста, очень нужно решить задачу. Есть определенное кол-во файлов с разным количеством строк и одинаковым количеством столбцов. Артикул. Наименование. Цена и т.д. Как их все собрать в единый (общий) список в отдельном файле, с последующей авт. обновляемостью? Представляю что это как-то должно делаться с помощью сводных таблиц, а как точно не пойму. Никаких функций с данными выполнять не надо. Просто общий список с данными и все. Спасибо заранее.
 
наиболее простой способ    
выделяется диапазон в исходном листе исходной книги  
копируется  
в нужное место нужной книги вставляем с помощью:  
специальная вставка/вставить связь  
 
но!  
файлы переименовывать нельзя  
перемещать из папки в папку нельзя  
переименовывать листы в исходных файлах нельзя  
 
точнее можно, но придется править ссылки.
 
Да такие способы с копированием и вставками, а также связями через равно известны. В файлах где лежат данные они могут добавляться, вот и требуется что бы они попадали в этот сводный список друг за другом посл. обновления.
 
Так не пойдёт? См. пример. (В общем файле запустите макрос)
 
Вообще конечно супер. Только вот в макросах совсем я не силен. Подскажите а дополнительно в листе под макрос можно задавать номера файлов из которых нужно группировать данные? На всякий случай я образцы прикрепил. Помогите если сможете, а то совсем  начальство достало.
 
А зачем вам "задавать номера файлов из которых нужно группировать данные?"  
 
Просто собераете все файлы в одной папке (25.xls, 34.xls, 37.xls, 48748.xls, 4o45u0.xls и т.д. и общий файл Forma-01.xls - где будет макрос и куда будут подтягиватся вся инфомация.)  
 
Так не пойдёт? (не указывать имена файлов, а собрать их все в одной папке? Макрос сам обработает все Excel файлы в этой папке.    
Как вам такое решение?  
 
А то вам каждый раз придётся задавать имена файлов, которые могут каждый день меняться  
 
P.S. макрос попробую переделать сегодня под вашу форму
 
Посмотрите пример. Я переделал макрос под вашу таблицу.  
 
Требования для правильной работы макроса  
 
1)Все нужные файлы должны быть в одной папке вместе с общим файлом (Forma-01.xls – имя можно изменить)  
2)Лишних Excel файлов в этой папке не должно быть  
3)Название листа в общем файле, куда будет подтягиваться информация должен называться Price-group (но его можно поменять в коде макроса, если нужно)  
4)В файлах откуда берём информацию (25.xls, 34.xls и т.д.) – лист с нужной информацией должен быть один, либо если листов много, то лист с информацией должен стоять первым (крайним слева)  
5)Файлы с информацией, откуда мы берём данные - не должны быть защищены паролем.  
 
надеюсь ничего не забыл )
 
{quote}{login=Pavel55}{date=21.05.2008 10:50}{thema=}{post}Посмотрите пример. Я переделал макрос под вашу таблицу.  
 
Требования для правильной работы макроса  
 
1)Все нужные файлы должны быть в одной папке вместе с общим файлом (Forma-01.xls – имя можно изменить)  
2)Лишних Excel файлов в этой папке не должно быть  
3)Название листа в общем файле, куда будет подтягиваться информация должен называться Price-group (но его можно поменять в коде макроса, если нужно)  
4)В файлах откуда берём информацию (25.xls, 34.xls и т.д.) – лист с нужной информацией должен быть один, либо если листов много, то лист с информацией должен стоять первым (крайним слева)  
5)Файлы с информацией, откуда мы берём данные - не должны быть защищены паролем.  
 
надеюсь ничего не забыл ){/post}{/quote}  
Pavel, огромное Вам спасибо за исправление под мою форму и за решение задачи в целом. Почему хотелось выборку делать заданием, так на то такая проблема , что в перечне более 3000 файлов, а у пользователей знания и внимательность заставляют желать лучшего. Вот и думалось, внес задание с заявки клиента по определенным кодам и не забивает себе голову нерадивый юзер. Но в любом случае Вам огромное спасибо еще раз!
 
{quote}{login=Pavel55}{date=21.05.2008 10:50}{thema=}{post}Посмотрите пример. Я переделал макрос под вашу таблицу.  
 
Требования для правильной работы макроса  
 
1)Все нужные файлы должны быть в одной папке вместе с общим файлом (Forma-01.xls – имя можно изменить)  
2)Лишних Excel файлов в этой папке не должно быть  
3)Название листа в общем файле, куда будет подтягиваться информация должен называться Price-group (но его можно поменять в коде макроса, если нужно)  
4)В файлах откуда берём информацию (25.xls, 34.xls и т.д.) – лист с нужной информацией должен быть один, либо если листов много, то лист с информацией должен стоять первым (крайним слева)  
5)Файлы с информацией, откуда мы берём данные - не должны быть защищены паролем.  
 
надеюсь ничего не забыл ){/post}{/quote}  
 
 
Павел, спасибо огромное за макрос.  
Скажите, а что и где нужно изменить, если я его выложу данные файлы на сервер (SharePoint Server 2007) в отдельную папку на отдельном узле (рабочая область). Мне бы хотелось, чтобы он от туда работал.
 
{quote}{login=The_Prist}{date=25.02.2009 05:50}{thema=}{post}С позволения Павла подкорректировал чуть-чуть. Выбираете путь к папке с файлами и все.{/post}{/quote}  
ОТличное решение. Не может подсказать как присвоить имена файлов именам листа в результирующем файле? Дело в том, что ко мне поступают отчеты ежедневно, внутри них листы с одинаковым названием "report". Вот если бы присваивало имя файла (он обозначен датой поступления) было бы шикарно
 
Приемы http://www.planetaexcel.ru/tip.php?aid=72
 
Павел, спасибо за данный макрос, очень помог в работе.  
Есть только одна незадача, у меня в файлах "донорах" поподаются ячейки с формулами, и макрос соответственно переносит сами формулы, а мне надо только значения.  
Все мои попытки поправить макрос самостоятельно проволились (нехватка познаний),весь форум перерыл, но нужной инфы не нашел.  
Прошу помощи.
 
...  
                    With .Worksheets("тест_лист")  
                         'номер последней заполенной строки  
                         iLastRowTempWb = .Cells(Rows.Count, 1).End(xlUp).Row  
                         iLastRowBaza = BazaSht.Cells(Rows.Count, 1).End(xlUp).Row + 1  
                         .UsedRange.Value = .UsedRange.Value  
                         .Range(.Cells(2, 1), .Cells(iLastRowTempWb, 27)).Copy Destination:=BazaSht.Cells(iLastRowBaza, 1)  
                    End With  
...
Я сам - дурнее всякого примера! ...
 
Огромное тебе человеческое спасибо многоуважаемый KukLP.  
А я то дурень, в файлы "доноры" макросы ставил на обновление доп. листа дублирующего необходимую мне инфу, но без формул.  
Да..., а сколько еще предстоит постичь...
 
{quote}{login=andreyog}{date=29.05.2011 04:13}{thema=Re: }{post}...весь форум перерыл...{/post}{/quote}  
одно из двух - это или наглая ложь, или поэтическая вольность :)))
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=ikki}{date=29.05.2011 08:43}{thema=Re: Re: }{post}{quote}{login=andreyog}{date=29.05.2011 04:13}{thema=Re: }{post}...весь форум перерыл...{/post}{/quote}  
одно из двух - это или наглая ложь, или поэтическая вольность :))){/post}{/quote}  
Первое.  
Все так пишут.
 
{quote}{login=Serge 007}{date=29.05.2011 08:46}{thema=Re: Re: Re: }{post}  
Все так пишут.{/post}{/quote}Хотел сказать что так пишут все, кто не искал.
 
Уж поверьте искал, и очень долго.  
Просто в моем случае уж оченнь сложно было сдатся, признать что мои познания далеко отстают от ваших и попросить о помощи вас - сторожил данного форума.  
К стати  теперь не тащит инфу с защищенных листов, поможите?
 
Перед копированием надо снимать защиту с листов - пароль должен быть известен.    
                    With .Worksheets("тест_лист")  
                         .Unprotect "пароль"  
                         'номер последней заполенной строки  
                         iLastRowTempWb = .Cells(Rows.Count, 1).End(xlUp).Row  
                         iLastRowBaza = BazaSht.Cells(Rows.Count, 1).End(xlUp).Row + 1  
                         .UsedRange.Value = .UsedRange.Value  
                         .Range(.Cells(2, 1), .Cells(iLastRowTempWb, 27)).Copy Destination:=BazaSht.Cells(iLastRowBaza, 1)  
                    End With
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Хотел уж было спросить " а где в макросе ее обратно поставить? ", а оно и так все великолепно работает.  
Всем кто помогал, огромное спасибо.  
 
 
Результат во вложении:
 
{quote}{login=andreyog}{date=29.05.2011 08:05}{thema=Re: }{post}Огромное тебе человеческое спасибо многоуважаемый KukLP.  
{/post}{/quote}Да что ж за мода на Планете пошла Тыкать незнакомым людям! andreyog, я с Вами ни гусей, ни свиней не пас и на брудершафт мы не пили. То,  что я попытался помочь абсолютно незнакомому автору, не повод к фамильярности. Скорей наоборот... Старые форумчане обращаются друг к другу на ты - это нормально, после какой-то межличностной переписки,  в форуме, или в личке не важно. А так... не понимаю.
Я сам - дурнее всякого примера! ...
 
Проршу Вас простить мне мою оплошность многоуважаемый KukLP, еще раз благодарю за помощь.
 
Принято.
Я сам - дурнее всякого примера! ...
 
Ребят, помогите разобраться с кодом. Вроде все правильно сделал, но выдает ошибку на строке:  
iLastRowBaza = BazaSht.Cells(Rows.Count, 2).End(xlUp).Row + 1  
 
Если у кого надется время, то прикладываю свой пример.
 
Не могу проверить - нет сейчас 2007/10, но подозреваю, что может быть ошибка с Rows.Count - это число вероятно 65536 (т.к. код в xls), а в xlsx строк больше.  
У меня пример через конвертер отработал без ошибок.
 
{quote}{login=Hugo}{date=23.01.2012 03:45}{thema=}{post}Не могу проверить - нет сейчас 2007/10, но подозреваю, что может быть ошибка с Rows.Count - это число вероятно 65536 (т.к. код в xls), а в xlsx строк больше.  
У меня пример через конвертер отработал без ошибок.{/post}{/quote}  
 
Так я пример запускаю, все отрабатывает на ура. Делаю под себя - не работает. Вроде все верно указываю - ан нет!
 
Найди 2 отличия:)  
                         iLastRowTempWb = .Cells(.Rows.Count, 2).End(xlUp).Row  
                         iLastRowBaza = BazaSht.Cells(BazaSht.Rows.Count, 2).End(xlUp).Row + 1
 
{quote}{login=RAN}{date=23.01.2012 07:48}{thema=}{post}Найди 2 отличия:)  
                         iLastRowTempWb = .Cells(.Rows.Count, 2).End(xlUp).Row  
                         iLastRowBaza = BazaSht.Cells(BazaSht.Rows.Count, 2).End(xlUp).Row + 1{/post}{/quote}  
 
Не понял О_о
 
О_оооо  
Нужно сравнить эти строчки с этими строчками в файле и найти 2 отличия.
 
{quote}{login=RAN}{date=23.01.2012 09:06}{thema=}{post}О_оооо  
Нужно сравнить эти строчки с этими строчками в файле и найти 2 отличия.{/post}{/quote}  
 
Ну я хоть и дурак в программирование на языке VBA но немножко соображаю :)  
 
iLastRowTempWb = .Cells(Rows.Count, 2).End(xlUp).Row 'здесь мы определим последнюю строку в открываемых файлах в столбце B  
 
iLastRowBaza = BazaSht.Cells(BazaSht.Rows.Count, 2).End(xlUp).Row + 1  'здесь определим последнюю строку в общем файле и прибавим 1, чтобы началть с этой строки заполнение (опять по стобцу Б)  
 
.Range(.Cells(5, 2), .Cells(iLastRowTempWb, 37)).Copy Destination:=BazaSht.Cells(iLastRowBaza, 2)     'здесь мы копируем со строки 5 и стобца Б до последней заполненой строки открываемых файлов до столбца 37... после чего вставляем лист общих данных со столбца Б со строки после последней заполненой  
 
 
Но почему все же не собирает информацию?) пишет собрано из 0 файлов! :(
Страницы: 1 2 След.
Читают тему
Наверх