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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2016, 09:00   #1
BUSHMANOV
Новичок
Джуниор
 
Регистрация: 01.02.2016
Сообщений: 1
По умолчанию Объединение файлов в один

Первого числа каждого месяца разные люди присылают отчётные таблицы (пример файлы Excel под названием 1, 2, 3 – это три разных человека).

Мне необходимо просто сделать сводную таблицу Excel (пример файл Excel под названием Сводная таблица - это, что должно получиться).

На сегодняшний день тупо открываю файл 1, выделяю, копирую, вставляю в файл Сводная таблица. Открываю файл 2, выделяю, копирую, вставляю в файл Сводная таблица и т.д.

Уверен, что это можно автоматизировать, но в Excel я только на уровне пользователя. Если не сложно подскажите как это сделать. Заранее благодарен.
Вложения
Тип файла: rar Материалы.rar (40.5 Кб, 12 просмотров)
BUSHMANOV вне форума Ответить с цитированием
Старый 01.02.2016, 09:40   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

http://excelvba.ru/code/CombineFiles
во вложении к статье есть файл с макросом, - надо только его немного доработать под ваши файлы
EducatedFool вне форума Ответить с цитированием
Старый 03.02.2016, 11:06   #3
green worm
Новичок
Джуниор
 
Регистрация: 03.02.2016
Сообщений: 5
По умолчанию

Всем доброго времени суток.
Уже не первая тема где написано как свести из разных файлов данные в одну таблицу.
Пример:
http://www.programmersforum.ru/showthread.php?t=39712
Но задача усложняется тем, что все данные из каждого файла надо сохранить на новый лист с названием = название обработанного файла.
green worm вне форума Ответить с цитированием
Старый 03.02.2016, 12:41   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

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

Цитата:
задача усложняется тем, что все данные из каждого файла надо сохранить на новый лист
вот тут Вы ошибаетесь, это не усложняет задачу, это описывает условия работы программы
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.02.2016, 14:26   #5
green worm
Новичок
Джуниор
 
Регистрация: 03.02.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
вот тут Вы ошибаетесь, это не усложняет задачу, это описывает условия работы программы
Для человека, для которого познания в программировании закончились на элементарном программировании в турбопаскале, это значительно усложняет задачу, т.к. надо искать куски чужого кода чтоб вставить в существующий.

На сколько понимаю, в существующем макросе необходимо добавить в обоих разделах команду, которая перед записью данных создает новый лист, а в случае очистки удаляет созданные листы.

Пока что вот что получилось.
Вложения
Тип файла: rar Сводная таблица.rar (17.8 Кб, 8 просмотров)
green worm вне форума Ответить с цитированием
Старый 03.02.2016, 14:33   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

лично для меня работу над задачей очень сильно усложняет отсутствие описания задачи
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.02.2016, 15:04   #7
green worm
Новичок
Джуниор
 
Регистрация: 03.02.2016
Сообщений: 5
По умолчанию Что пытаюсь получить в итоге

Прошу прощенья.
Абстрактная задача.
Регулярно поступают отдельные файлы .xls с большими таблицами.
Есть таблица которая обсчитывает данные из них. Для этого вручную создаются новые листы, вручную меняется название на МесяцНазвание файла, все данные из одного из полученных файлов копируются на этот новый лист.
Конкретика.
Из каждого из регионов каждый месяц приходят данные в большой таблице .xls и сохраняются в одну папку. В эту же папку закидывается таблица с уже забитой формулой и начинают создаваться вручную новые листы, на которые копипастятся полностью данные из полученных файлов (полностью - ctrl+a; ctrl+c; ctrl+v). Лист обзывается, к примеру, ЯнварьБашкирия и так далее. Таблица на первой странице проводит подсчет с каждого листа.

Жена попросила автоматизировать процесс добавления новых листов с данными. Пока что удалось заставить на один лист закидывать данные из всех файлов. Но пришлось отказаться от такой реализации так как выбирать нужные данные в общем объеме проблематично.
green worm вне форума Ответить с цитированием
Старый 03.02.2016, 15:31   #8
green worm
Новичок
Джуниор
 
Регистрация: 03.02.2016
Сообщений: 5
По умолчанию

Как я понимаю, надо код дополнить строчкой, которая после обработки каждого файла будет создавать новый лист на который и будет записывать то что наобрабатывал:

Sub ЗаполнениеСводнойТаблицы()
Application.ScreenUpdating = False: Application.DisplayAlerts = False

Dim coll As New Collection, wb As Workbook, sh As Worksheet, newRow As Range
Mask = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "*.xls")

Filename = Dir(Mask)
While Filename <> "" ' перебираем все файлы в текущей папке
If Not Filename Like ThisWorkbook.Name & "*" Then coll.Add Filename
Filename = Dir
Wend

'For Each Item In coll: Debug.Print Item: Next
On Error Resume Next
For Each Item In coll
Set wb = Workbooks.Open(Replace(ThisWorkbook .FullName, ThisWorkbook.Name, Item), , True)
If Not wb Is Nothing Then
Set sh = wb.Worksheets(1)
LastRow = sh.Range("a65000").End(xlUp).Row
If LastRow > 4 Then ' если есть заполненные строки
For i = 5 To LastRow
Set newRow = Me.Range("a65000").End(xlUp).Offset (1)
sh.Rows(i).Copy newRow
newRow.EntireRow.AutoFit
Next i
End If
wb.Close False
End If
Next
Application.DisplayAlerts = True
End Sub



Потом уже сделаю лист на котором будут данные обрабатываться из вновьсозданных листов.
green worm вне форума Ответить с цитированием
Старый 03.02.2016, 16:02   #9
green worm
Новичок
Джуниор
 
Регистрация: 03.02.2016
Сообщений: 5
По умолчанию

После поиска по форумам нашлись вот такие строчки. Вопрос заключается в том, куда надо их поместить в коде выше чтоб данные записывались каждый раз на новом листе?

Dim newlis As Worksheet
Set newlis = ActiveWorkbook.WORKSHEETS.Add
newlis.Name = Filename
green worm вне форума Ответить с цитированием
Старый 03.02.2016, 22:07   #10
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

А ТС и "green worm" ето один и тот же человек или разные? В первом сообщении одни файлы а в 5 вообще другие

по размещению.
Dim в своем разделе
set перед Set sh = wb.Worksheets(1)
тогда и строку Set sh = wb.Worksheets(1) надо изменить в выделеном месте
newlis.Name = Filename после set newlis, но тоже б надобно сменить выделеную часть.
IMHO
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HELP!!! Macros на объединение csv файлов в один sanych_09 Microsoft Office Excel 18 04.08.2015 10:41
объединение нескольких файлов в один Pavelasd Microsoft Office Excel 1 01.05.2014 16:08
Объединение файлов одинаковой структуры в один файл Tankiss Microsoft Office Excel 20 11.09.2013 17:25
Объединение двух файлов в один kitty19 Общие вопросы C/C++ 4 15.12.2010 15:51
Объединение данных из разных файлов на один лист Комо Microsoft Office Excel 11 22.06.2010 21:26