Страницы: 1
RSS
объединение нескольких файлов excel в один
 
Добрый вечер!
Имеем: 150 однотипных по структуре файлов (книг) по 4 кб, в каждом файле один заполненный лист, подписанный допустим "ABCDE-auto", остальные пустые
Необходимо: 150 книг слить в одну книгу на один лист

макрос, который https://www.planetaexcel.ru/techniques/3/49/#129 тут нашел, не работает у меня, почему-то.
Помогите, пожалуйста! может есть у кого готовый рабочий макрос?
 
покажите пожалуйста пример ,где не получается
 
Если задать  поиск по названию Вашей темы (даже только на этом форуме), вывалится большой список тем. Неужели там только одно решение?
 
https://www.planetaexcel.ru/techniques/24/2152/
 
спасибо, только что посмотрел, сижу впитываю) лучше бы готовый макрос канеш, часто приходится одинаковые таблицы слепливать, просто в этот раз их дохрена и времени нет - очень срочно
 
Вот вам макрос (+ файл ниже). Собирает листы из разных файлов в один файл (в одну книгу)

Код
Sub CombineWorkbooks()
    Dim FilesToOpen, wbImportFrom As Workbook, iFile As Long, counter As Long, SheetCopyName As String
     
    If MsgBox("Собрать листы 'ABCDE-auto' из файлов?", vbQuestion + vbYesNo, "Вопрос") = vbNo Then Exit Sub
    
    'вызываем диалог выбора файлов откуда будем брать данные
    FilesToOpen = Application.GetOpenFilename(FileFilter:="All files (*.*), *.*", MultiSelect:=True, Title:="Укажите файлы")
  
    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "Не выбрано ни одного файла!", vbExclamation, "Внимание"
        Exit Sub
    End If
    
    SheetCopyName = "ABCDE-auto" 'название листа, которое будем собриать
    counter = 0 'счётчик обработанных файлов
      
    Application.ScreenUpdating = False 'отключение обновления экрана
    
    'проходим по всем выбранным файлам
    For iFile = 1 To UBound(FilesToOpen)
        'если в список попал общий файл, то пропускаем его
        If FilesToOpen(iFile) <> ThisWorkbook.FullName Then
            Set wbImportFrom = Workbooks.Open(Filename:=FilesToOpen(iFile), ReadOnly:=True)
            'проверяем на наличие листа ABCDE-auto в файле
            If SheetExist(wbImportFrom.Name, SheetCopyName) Then
                counter = counter + 1 'увеличиваем счётчик на 1
                'копируем лист в общий файл
                wbImportFrom.Worksheets(SheetCopyName).Copy ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
            End If
            'закрываем очередной файл и переходим к другому файлу
            wbImportFrom.Close savechanges:=False
        End If
    Next iFile
    
    Application.ScreenUpdating = True
    MsgBox "Данные из " & counter & " файлов собраны!", vbInformation, "Конец"
End Sub

Function SheetExist(WB As String, iSheetName As String) As Boolean
    On Error Resume Next
    With Workbooks(WB).Worksheets(iSheetName): End With
    SheetExist = (Err = 0)
    Err.Clear
    On Error GoTo 0
End Function
Изменено: New - 20.01.2021 00:00:48
 
на старте были в 150 файлах, теперь будут на 150 листах))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
New написал:
Вот вам макрос (+ файл ниже)
спасибо конечно, но..см.скриншот  
Изменено: gvalexey - 19.01.2021 01:32:21
 
Цитата
New написал:
Вот вам макрос (+ файл ниже)
хм..может дело в названии листов? ABCDE-auto на самом деле фантазийное название..
 
просто макрос (программирование) это о чем-то  совершенно конкретном, о четко сформулированной задаче, а не о фантазийных названиях
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
gvalexey написал:
ABCDE-auto на самом деле фантазийное название..
хм... а как вы считаете - Макрос открывает файл, там, например, 10  листов и он будет брать название нужного листа из вашей головы?
Как вы указали название листа в вашем первом сообщение, так я макрос и написал.
Откройте мой файл, нажмите Alt+F11 - откроется редактор VBE кода и вы увидите текст макроса. Найдите глазами в коде строку, где указано имя листа и измените его на нужное.
Изменено: New - 19.01.2021 23:58:55
 
спасибо, буду разбираться.
 
Цитата
Ігор Гончаренко написал:
на старте были в 150 файлах, теперь будут на 150 листах))
+
получилось 150 листов
 
Чтобы собрать один лист из кучи файлов на 1 общий лист надо знать структуру этого листа.
Что там находится на ваших листах? Таблица? В каких ячейках? Надо поставить эту таблицу со всех файлов одну таблицу под другой? Или вправо?
Например, если таблица находится всегда в столбцах А:D и её нужно собрать в столбик одну под одной со всех файл - так будет понятее
p.s. помню уже писал макрос как-то здесь на форуме, там человеку нужно было со всех файлов собрать один столбец на общий лист (например, собрать со всех файлов лист D в один общий лист)
Изменено: New - 19.01.2021 23:54:09
 
во вложениях обрз1 обрз2 обрз3 это три файла-исходника, нужно объединить в "должно получиться", отмечу, что в исходниках кол-во строк м.б. разным, 3, 5, ну до 10
 
см. файл (макрос перед сбором данных будет удалять все данные с активного листа)
 
есть такая проблемка
 
Цитата
gvalexey написал:
Необходимо: 150 книг слить в одну книгу на один лист
New, когда человек пишет так и больше ни слова не пишет о структуре этих данных -
есть над каждой таблицей шапка или нет, если есть то сколько строк занимает
на какой лист собрать данные? на новый, на текущий, на последний?
если данные записывать на существующий лист, данные дописывать за существующими, удалить все существующие?
это информация без которой НЕЛЬЗЯ написать корректный макрос. Нельзя написать корректный макрос - зачем его вообще писать?
поэтому уверенно прохожу мимо таких тем, руководствуясь простым принципом:
нет задачи - не может быть решения!
Изменено: Ігор Гончаренко - 20.01.2021 00:51:18
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
New написал:
макрос перед сбором данных будет удалять все данные с активного листа
спасибо огромное, все заработало! Весьма признателен :)
 
отлично

Цитата
Ігор Гончаренко написал:
без которой НЕЛЬЗЯ написать корректный макрос.
Игорь, полностью согласен с тобой. Пишу от того, что мне скучно, сижу на больничном
Изменено: New - 20.01.2021 00:52:11
 
Цитата
Ігор Гончаренко написал:
поэтому уверенно прохожу мимо таких тем, руководствуясь простым принципом:нет задачи - не может быть решения!
мимо же не прошли, свои 3 копейки вставили ;)
возможно Вам когда-нибудь придется обратиться на форум по вопросам, в которых Вы мало/плохо разбираетесь, а я профессионал.
Как специалист совершенно в другой области так же подвергну Вас обструкции и легкому глуму :) Добрее надо быть Игорь, добрее)
 
Цитата
New написал:
сижу на больничном
тревожные слова в нынешней ситуации, а это через сообщения не передается?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
)) не переживай. Не передаётся ) Уже иду на поправку
Страницы: 1
Наверх