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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2010, 18:34   #1
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию Как создать сводный файл из 700 других файлов?

Уважаемые программисты, очень нужна ваша помощь.
Есть много разных компаний (порядка 700), для каждой из которых в отдельном файле excel заполнен баланс на разные отчетные даты (в приложении для примера у меня это файлы Вася.xls и Рома.xls). Мне нужно собрать все 700 компаний в один сводный файл, причем на каждую отчетную дату своя таблица. При этом в сводной таблице строки и столбцы транспонируются. (в приложении то, что в итоге должно получится в файле Итог_файл.xls)
Я подумала, что можно и просто копированием это сделать из каждого файла в сводный, задавать искомую дату в самом макросе и искать её в 3 строчке каждого файлика. И со смещением копировать в сводную таблицу для каждой следующей компании. Но получится что все равно надо 700 раз открывать файлы.
Пока ничего более лучшего в голову не пришло.
Буду очень признательна за помощь.
Спасибо.
Вложения
Тип файла: rar баланс.rar (108.9 Кб, 22 просмотров)
robbe вне форума Ответить с цитированием
Старый 23.03.2010, 20:57   #2
Igor67
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 56
По умолчанию

robbe, а кто Вам писал другие макросы?

Сделать можно, но возникают вопросы для ленивых
1. даты отчетов в файлах всегда совпадают с именами листов.
2. количество листов всегда равно количеству отчетных дат
3 особенно лениво - соответствие данных например строка 15 пишется все время в столбец А, 16 - В и так далее.
Вероятно делать надо так - открываем файлы по очереди и переносим данные на заданные листы, потом следующий файл
обычно я на http://planetaexcel.ru/forum.php
Igor67 вне форума Ответить с цитированием
Старый 24.03.2010, 04:49   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
получится что все равно надо 700 раз открывать файлы.
Если имена листов в файлах для обработки одинаковые (или разные, но заранее известные), а также, если таблицы в этих файлах фиксированы, т.е. количество строк и столбцов и их назначение постоянно, то можно сделать обработку не открывая файлов.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 24.03.2010, 09:08   #4
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию

Цитата:
Если имена листов в файлах для обработки одинаковые (или разные, но заранее известные), а также, если таблицы в этих файлах фиксированы, т.е. количество строк и столбцов и их назначение постоянно, то можно сделать обработку не открывая файлов.
Имена листов одинаковые во всех файлах, и таблицы фиксированные.
SAS888, а можете примерно рассказать, как это делать. Может где-то что-то подобное уже рассматривалось, и я смогу переделать под себя.
robbe вне форума Ответить с цитированием
Старый 24.03.2010, 09:51   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Примерно так:
1. Создаем временный лист
2. В цикле просматриваем (не открываем) все нужные файлы.
3. Для каждого файла на временном листе создаем ссылки на текущий файл, известный лист, в известном диапазоне.
4. Получив значения, удаляем ссылки, оставляя только значения.
5. Работаем (копируем, вычисляем и т.п.) с данными этой таблицы (текущего файла).
6. По окончании работы удаляем временный лист.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 24.03.2010, 10:19   #6
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

если сделать все таки обычным способом:

получить имена файлов из папки (скопируются на лист "имена" в первую колонку)
Код:
Sub Filename()
Dim Directory As String '
Dim f As String
Dim r As Integer
Dim sh as worksheet
set sh = sheets("Имена") ' тут свой лист
Directory = ("c:\vba\") 'тут укажите свою
f = Dir(Directory)
Do While f <> ""
r = r + 1
Cells(r, 1) = f
f = Dir()
Loop
End Sub
Код:
sub getdata
dim iL as long
dim i as long
dim shName as worksheet
dim shBase as worksheet
dim s as string
set shname=sheets("имена") ' лист с именами файлов
set shBase=sheets("База") ' лист куда все будет складыватся
il=shname.cells(rows.count,1).end(xlup).row ' последняя заполненная строка на листе с именами
for i =1 to il ' для каждого имени файла (с 1го по последний)
s=shname.cells(i,1) ' имя файла
Workbooks.Open ("c:\vba\" & s) ' открываем это имя из заданной папки (папка соотв своя)
[тут выполняем копирование нужных данных в нужное место, я правда так и не понял что и куда копируется]
Workbooks(s).Close False ' закрываем файл без сохранения
next i ' следующий файл
end sub
Dophin вне форума Ответить с цитированием
Старый 24.03.2010, 10:23   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

To Dophin:
Думаю, что все будет зависеть от того, какие файлы обрабатываются. Если там много данных, формул, форматов и т.п., то они могут долго открываться. Нужно пробовать, как будет быстрее: Открывать, или создавать ссылки.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 24.03.2010, 10:30   #8
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

исходя из опыта общения с Вами, то уверен что Ваш вариант более скоростной. но мой наверно все таки более понятен и прост)
Dophin вне форума Ответить с цитированием
Старый 24.03.2010, 12:38   #9
Igor67
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 56
По умолчанию

robbe, Держите вариант
Так, как Вы не написали соответствие данных - сделал только на 1 блок - дальше сами, если подойдет.
Положите файл с макросом в папку с Вашими файлами для обработки и запустите на выполнение.
По первому файлу будут определены названия листов и должны вставляться данные.
ЗЫ в подписи процедуры - автор оригинального маккроса взятого за исходный.
Вложения
Тип файла: zip баланс1.zip (144.6 Кб, 33 просмотров)
обычно я на http://planetaexcel.ru/forum.php
Igor67 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать и сохранить несколько файлов в .zip Lubocka Microsoft Office Excel 8 09.08.2012 20:50
Как в файле собственного типа (с возможностью шифрования) сохранять несколько других файлов? Кронос Помощь студентам 1 20.01.2010 21:27
Создать загрузчик других программ в свое окно fiddler Общие вопросы Delphi 4 25.11.2009 13:05
Сводный файл для результатов - помогите плз porco Microsoft Office Excel 0 19.05.2009 15:31
Как создать БД в SQL из word файлов Dennikid SQL, базы данных 13 09.11.2008 13:07