Добрый день! подскажите, пожалуйста, как можно свести несколько файлов в один. Например, есть 10 файлов excel с одинаковой структурой. Каждый файл содержит одинаковые листы в которых заполнены разные строки (в листе 1 - строки 1,11,21...., в листе 2 - строки 2,12,22... и т.д). Нужно сделать один сводный файл. Файлов, листов и заполненных строк может быть очень большое количество, поэтому вручную копировать, делать ссылки, ВПР и т.д очень затруднительно. Есть ли решение такой задачи?
Добрый день! подскажите, пожалуйста, как можно свести несколько файлов в один. Например, есть 10 файлов excel с одинаковой структурой. Каждый файл содержит одинаковые листы в которых заполнены разные строки (в листе 1 - строки 1,11,21...., в листе 2 - строки 2,12,22... и т.д). Нужно сделать один сводный файл. Файлов, листов и заполненных строк может быть очень большое количество, поэтому вручную копировать, делать ссылки, ВПР и т.д очень затруднительно. Есть ли решение такой задачи?bjork
я просто поспрашивала у знакомых, и получив в ответ только пожатие плечами, почти потеряла надежду на решение)) вот примеры файлов, данные которых нужно свести в один
я просто поспрашивала у знакомых, и получив в ответ только пожатие плечами, почти потеряла надежду на решение)) вот примеры файлов, данные которых нужно свести в одинbjork
Sub Podgotovka1() Dim x As String Dim x1 As Long Dim wb As Workbook Dim i As Long i = 4 Ch_Dir = "C:\XLS_FILES\" Application.ScreenUpdating = False x1 = 1 x = "*.xls" nmfile = Dir(Ch_Dir & x) pthname = Ch_Dir + nmfile MsgBox (pthname)
Do While nmfile <> "" nmfile = Dir() pthname = Ch_Dir + nmfile x1 = x1 + 1 If nmfile <> "" Then MsgBox (pthname) Set wb = Workbooks.Open(pthname) ThisWorkbook.Worksheets(1).Range("a" & x1 + i).Value = x1 ThisWorkbook.Worksheets(1).Range("b" & x1 + i).Value = Range("b11").Value ThisWorkbook.Worksheets(1).Range("c" & x1 + i).Value = Range("b3").Value ThisWorkbook.Worksheets(1).Range("d" & x1 + i).Value = Range("b4").Value Application.DisplayAlerts = False wb.Close Application.DisplayAlerts = True End If Loop Application.ScreenUpdating = True End Sub
[/vba] Все книги из C:\XLS_FILES\ с маской *.xls откроет и из первого листа с ячеек b11, c1, d1 занесет в книгу, из которой запустился макрос в первый лист, начиная со строки 4 в столбцы b, c, d
Вот вам для начала: [vba]
Код
Sub Podgotovka1() Dim x As String Dim x1 As Long Dim wb As Workbook Dim i As Long i = 4 Ch_Dir = "C:\XLS_FILES\" Application.ScreenUpdating = False x1 = 1 x = "*.xls" nmfile = Dir(Ch_Dir & x) pthname = Ch_Dir + nmfile MsgBox (pthname)
Do While nmfile <> "" nmfile = Dir() pthname = Ch_Dir + nmfile x1 = x1 + 1 If nmfile <> "" Then MsgBox (pthname) Set wb = Workbooks.Open(pthname) ThisWorkbook.Worksheets(1).Range("a" & x1 + i).Value = x1 ThisWorkbook.Worksheets(1).Range("b" & x1 + i).Value = Range("b11").Value ThisWorkbook.Worksheets(1).Range("c" & x1 + i).Value = Range("b3").Value ThisWorkbook.Worksheets(1).Range("d" & x1 + i).Value = Range("b4").Value Application.DisplayAlerts = False wb.Close Application.DisplayAlerts = True End If Loop Application.ScreenUpdating = True End Sub
[/vba] Все книги из C:\XLS_FILES\ с маской *.xls откроет и из первого листа с ячеек b11, c1, d1 занесет в книгу, из которой запустился макрос в первый лист, начиная со строки 4 в столбцы b, c, dSergeyKorotun
Сообщение отредактировал SergeyKorotun - Среда, 21.08.2013, 17:10
Посмотрел файлы. В общем всё решаемо, но сильно портят жизнь эти объединённые ячейки. Если бы от них избавиться - код получился бы простым и быстрым.
Я думаю нужно делать так - вручную заготовить один пустой файл этой структуры. Далее цикл по всем листам всех выбранных в диалоге файлов, заносим в ТРИ ПАРАЛЛЕЛЬНЫХ словаря ключ лист|товар|конкуренты и в каждый Кількість Мін роздр. ціна Макс роздр. ціна. С суммированием.
Затем аналогичный цикл по сводному листу - извлекаем по ключу данные из словарей, раскладываем по местам. Если там уже есть данные - можно суммировать.
Но т.к. есть эти объединения... В общем, сделать можно и так, но нет времени/желания запросто так возиться...
Так что ответ на вопрос - ЕСТЬ! Но скорее всего не формулами. Макросом проще.
Посмотрел файлы. В общем всё решаемо, но сильно портят жизнь эти объединённые ячейки. Если бы от них избавиться - код получился бы простым и быстрым.
Я думаю нужно делать так - вручную заготовить один пустой файл этой структуры. Далее цикл по всем листам всех выбранных в диалоге файлов, заносим в ТРИ ПАРАЛЛЕЛЬНЫХ словаря ключ лист|товар|конкуренты и в каждый Кількість Мін роздр. ціна Макс роздр. ціна. С суммированием.
Затем аналогичный цикл по сводному листу - извлекаем по ключу данные из словарей, раскладываем по местам. Если там уже есть данные - можно суммировать.
Но т.к. есть эти объединения... В общем, сделать можно и так, но нет времени/желания запросто так возиться...
Так что ответ на вопрос - ЕСТЬ! Но скорее всего не формулами. Макросом проще.Hugo
Чуть изменил - не суммируем, а выбираем минимум и максимум. Объединения убирать не нужно, они нужны В общем так - открыли этот файл, открыли/активировали один обрабатываемый файл, нажали Alt+F8, выбрали макрос Свод из этого файла, выполнили. Ждите сообщения. Затем открыли/активировали другой обрабатываемый файл - далее аналогично. Можно добавить цикл по всем выбранным в диалоге файлам, если их всегда много и обрабатываете их обычно сразу все.
Чуть изменил - не суммируем, а выбираем минимум и максимум. Объединения убирать не нужно, они нужны В общем так - открыли этот файл, открыли/активировали один обрабатываемый файл, нажали Alt+F8, выбрали макрос Свод из этого файла, выполнили. Ждите сообщения. Затем открыли/активировали другой обрабатываемый файл - далее аналогично. Можно добавить цикл по всем выбранным в диалоге файлам, если их всегда много и обрабатываете их обычно сразу все.Hugo
Чуть изменил - не суммируем, а выбираем минимум и максимум.
т.е. макрос ко всем своим достоинствам еще и суммирует и находит мин и максимум в последней суммарной табличке? у меня просто этого не происходит или я не правильно поняла?
Чуть изменил - не суммируем, а выбираем минимум и максимум.
т.е. макрос ко всем своим достоинствам еще и суммирует и находит мин и максимум в последней суммарной табличке? у меня просто этого не происходит или я не правильно поняла?
Я понял так - в тех таблицах есть количество и минимальная и максимальная цена (или что там не по русски написано, не понял). Так вот код суммирует количество, а из этих min/max выбирает min и max. Если и их нужно суммировать - переделайте чтоб суммировало аналогично количеству.
Как перебрать все выбранные в диалоге файлы - ищите код с использованием например msoFileDialogFilePicker Выбрали файлы, перебираем их в цикле, каждый открываем, копируем данные, закрываем и т.д. Писать сейчас некогда, т.к. писать относительно много, ну и в общем это рутина, не интересно...
По структуре - по условиям задачи структура одинакова, примеры одинаковы. Код и писался под это. Если структура непрогнозируема - то в общем случае код написать невозможно. Хотя в каких-то пределах можно поискать где какой столбец - но Вам дешевле будет привести все файлы к одной структуре. Писать код бесплатно под запутанную структуру думаю никто не будет.
Я понял так - в тех таблицах есть количество и минимальная и максимальная цена (или что там не по русски написано, не понял). Так вот код суммирует количество, а из этих min/max выбирает min и max. Если и их нужно суммировать - переделайте чтоб суммировало аналогично количеству.
Как перебрать все выбранные в диалоге файлы - ищите код с использованием например msoFileDialogFilePicker Выбрали файлы, перебираем их в цикле, каждый открываем, копируем данные, закрываем и т.д. Писать сейчас некогда, т.к. писать относительно много, ну и в общем это рутина, не интересно...
По структуре - по условиям задачи структура одинакова, примеры одинаковы. Код и писался под это. Если структура непрогнозируема - то в общем случае код написать невозможно. Хотя в каких-то пределах можно поискать где какой столбец - но Вам дешевле будет привести все файлы к одной структуре. Писать код бесплатно под запутанную структуру думаю никто не будет.Hugo