Слияние нескольких файлов excel в нескольких папках с использованием макросов vba

Необходимо прокрутить несколько папок (3 папки в одном каталоге) и объединить все файлы из этих нескольких папок.

Следующий код объединяет все файлы из одной папки (A). Мне нужно объединить все файлы из 3 разных папок: A, B и C.

Мой вопрос: как добавить цикл для объединения файлов из оставшихся 2 папок

Это код excelvba:

Sub Merge() With Worksheets("Sheet2") Dim bookList As Workbook Dim MergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object Dim sCURFolderPath As String Dim sHostFolder As String Application.ScreenUpdating = False Set MergeObj = CreateObject("Scripting.FileSystemObject") 'change folder path of excel files here sCURFolderPath = Application.ActiveWorkbook.Path ' Current directory folder sHostFolder = sCURFolderPath & "\First Month" Set dirObj = MergeObj.GetFolder(sHostFolder) Set filesObj = dirObj.Files For Each everyObj In filesObj Set bookList = Workbooks.Open(everyObj) Range("A2:Z" & Range("A65536").End(xlUp).Row).Copy ThisWorkbook.Worksheets("Sheet2").Activate Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Application.CutCopyMode = False bookList.Close Next End With End Sub 

Секрет заключается в изменении значения sHostFolder, которое в настоящее время равно: sCURFolderPath & "\ First Month"

Здесь есть два сценария: либо вы (1) знаете количество и имена подпапок, либо (2) количество и имена подпапок неизвестны

сценарий (1): вместо цикла вы поместите свой выше код в функцию с одним строковым параметром, содержащим имя папки, а затем вызовите функцию три раза:

 MyFunction("FirstMonth") MyFunction("SecondMonth") etc... 

сценарий (2): как только вы узнаете имя каталога, вы можете совершать повторные вызовы в объект Dir файловой системы:

Dir (sitePath, vbDirectory)

ваш цикл может проверять длину / значение, возвращаемое каждый раз, и если есть имя подкаталога, вы можете использовать это значение как часть переменной sHostFolder, а затем запустить существующий код. очевидно, вы должны выйти из цикла после того, как Dir () не сможет вернуть правильное имя подкаталога.

Удачи!

Я успешно смог объединиться с помощью Excel Power Query и сохранил много времени на кодирование. Спасибо @teylyn 🙂 🙂

  • Конкатенировать ячейки «Описание» в excel, если такая же транзакция распознана
  • Слияние различных рабочих листов книги
  • excel объединить строки на основе значений столбца
  • Excel - объединить строки с общими значениями и объединить различия в одном столбце
  • Как объединить / объединить много несохраненных документов Excel в один?
  • Как я могу объединить несколько ячеек без потери текстовых данных и без использования формулы?
  • openpyxl: ValueError: dtype: int64 в Excel
  • Скрипт Powershell для объединения нескольких CSV с несколькими разделяемыми заголовками
  • Строковые строки столбца столбца Excel в строке с запятой
  • Как объединить файлы .csv в один .xls-файл на нескольких листах с помощью Python?
  • Формула Excel для слияния строк
  • Interesting Posts

    Несмотря на одинаковые диапазоны – ошибки в файлах Google. Аргументы аргументов для COUNTIFS имеют разный размер.

    Excel VBA Rnd не является фактически случайным

    Сумма дублированного именованного диапазона по нескольким листам?

    POI удаляет цвет фона ячейки

    Как предотвратить Excel от удвоения апострофов?

    Как найти первый и второй максимальный номер?

    Excel: как группировать, а затем сортировать группы по индивидуальному заказу?

    Не удалось написать макрос для Excel VBA для копирования определенного значения ячейки в следующие пустые строки

    Как написать выход Fortran в виде файла CSV?

    VBA для копирования только новых данных из одной книги в другую книгу (на основе даты)

    Как создать сложный зависимый выпадающий список с помощью VBA в Excel 2016?

    Percentile If Statement Excel

    Какова цель OFFSET в excel?

    Изменение по цели val в качестве диапазона для игнорирования пустых и 0 значений ячеек

    Попытка найти все возможные комбинации

    Давайте будем гением компьютера.