Автоматическое создание перечня файлов в таблице

Иван Корнев·21.05.2024·4 мин

Чтобы вывести список файлов из папки в Excel, используйте встроенный инструмент Power Query (вкладка «Данные» → «Получить данные» → «Из файла» → «Из папки»). Это самый надежный способ, не требующий программирования: он автоматически подтянет имена, пути, размеры и даты изменения всех документов в выбранной директории. Если нужна сложная логика или работа с вложенными папками рекурсивно, подойдет макрос VBA.

Ручной ввод имен файлов занимает много времени и чреват ошибками. Ниже рассмотрены три эффективных метода автоматизации этой задачи: от стандартного интерфейса до продвинутых скриптов.

Способ 1: Power Query (Рекомендуемый метод)

Этот способ доступен в Excel 2016 и новее (включая Office 365). Он идеален для регулярного обновления списка: при появлении новых файлов достаточно нажать кнопку «Обновить».

Пошаговая инструкция:

  1. Откройте пустой лист Excel.
  2. Перейдите на вкладку Данные (Data).
  3. Нажмите Получить данныеИз файлаИз папки.
  4. В открывшемся окне укажите путь к нужной директории и нажмите ОК.
  5. Появится окно предпросмотра. Не нажимайте «Загрузить», а выберите Преобразовать данные (Transform Data).
  6. Откроется редактор Power Query. Здесь вы увидите столбцы: Content, Folder Path, Name, Date created, Date modified, Attributes и др.
  7. Удалите лишние столбцы (выделите их, правая кнопка мыши → Удалить), оставив только нужные (например, Name, Date modified, Folder Path).
  8. При необходимости отфильтруйте файлы по расширению (нажмите на стрелку в заголовке столбца Extension).
  9. Нажмите кнопку Закрыть и загрузить (Close & Load) в левом верхнем углу.

Список сформируется в виде умной таблицы. Чтобы обновить его при добавлении новых файлов, просто кликните правой кнопкой мыши по таблице и выберите Обновить.

Способ 2: Макрос VBA (Для гибкой настройки)

Используйте этот метод, если вам нужно обрабатывать вложенные папки (рекурсия), фильтровать файлы по сложным критериям или вы используете старую версию Excel без Power Query.

Как запустить:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите InsertModule.
  3. Вставьте следующий код:
Sub GetFileList()
    Dim folderPath As String
    Dim fso As Object
    Dim file As Object
    Dim ws As Worksheet
    Dim i As Integer
    
    ' Настройки
    folderPath = "C:\Users\Public\Documents\" ' Укажите свой путь, заканчивая слэшем \
    Set ws = ThisWorkbook.Sheets(1)
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' Очистка листа и заголовки
    ws.Cells.Clear
    ws.Range("A1:C1").Font.Bold = True
    ws.Cells(1, 1).Value = "Имя файла"
    ws.Cells(1, 2).Value = "Размер (КБ)"
    ws.Cells(1, 3).Value = "Дата изменения"
    
    i = 2
    Application.ScreenUpdating = False
    
    ' Перебор файлов
    If fso.FolderExists(folderPath) Then
        For Each file In fso.GetFolder(folderPath).Files
            ws.Cells(i, 1).Value = file.Name
            ws.Cells(i, 2).Value = Round(file.Size / 1024, 2)
            ws.Cells(i, 3).Value = file.DateLastModified
            i = i + 1
        Next file
    Else
        MsgBox "Папка не найдена! Проверьте путь."
    End If
    
    Application.ScreenUpdating = True
    MsgBox "Готово! Найдено файлов: " & i - 2
End Sub
  1. Измените переменную folderPath на актуальный путь к вашей папке.
  2. Нажмите F5 для запуска.

Макросы работают только если включена поддержка макросов. Сохраняйте файл в формате .xlsm (Книга Excel с поддержкой макросов), иначе код будет удален при сохранении.

Способ 3: Командная строка + Импорт (Быстрый хак)

Если нельзя использовать макросы, а Power Query кажется сложным, можно сгенерировать текстовый список через систему и импортировать его.

  1. Откройте папку, файлы из которой нужны.
  2. Кликните в адресную строку проводника, введите cmd и нажмите Enter. Откроется черное окно командной строки.
  3. Введите команду: dir /b > files.txt и нажмите Enter.
    • /b означает «чистый формат» (только имена).
    • Создается файл files.txt со списком всех имен.
  4. Откройте этот .txt файл в Блокноте, скопируйте содержимое (Ctrl+A, Ctrl+C).
  5. Вставьте в ячейку A1 в Excel.

Этот метод дает только имена файлов без путей и размеров, но работает мгновенно на любом компьютере.

Сравнение методов

МетодСложностьОбновление данныхДополнительные данныеРекурсия (подпапки)
Power QueryНизкаяАвтоматическое (кнопка)Путь, размер, дата, атрибутыДа (нужна настройка)
VBA МакросСредняяРучной запуск макросаЛюбые (можно добавить автора, теги)Да (в коде)
Командная строкаОчень низкаяПолностью вручнуюТолько имя файлаНет (без сложных ключей)

Частые ошибки

  • Неверный путь в макросе: Обязательно указывайте обратный слэш в конце пути (например, C:\Docs\, а не C:\Docs). Иначе скрипт прочитает родительскую папку.
  • Блокировка внешних данных: При использовании Power Query Excel может запросить подтверждение на подключение к папке. Нажмите «Разрешить» или настройте уровни конфиденциальности в параметрах запроса.
  • Лимит строк: Если в папке сотни тысяч файлов, обычный лист Excel может переполниться (лимит 1 048 576 строк). В таких случаях лучше фильтровать данные еще на этапе загрузки в Power Query.

FAQ

Можно ли получить список файлов с вложенными папками? Да. В Power Query после шага получения данных нажмите кнопку «Combine» (Объединить) или добавьте функцию Folder.Files с параметром рекурсии. В VBA нужно дописать цикл, который заходит в каждую подпапку (SubFolder.Files).

Как отфильтровать только файлы .PDF или .XLSX? В Power Query это делается через фильтр столбца Extension. В VBA добавьте условие внутри цикла: If LCase(Right(file.Name, 4)) = ".pdf" Then ....

Почему макрос выдает ошибку «Permission Denied»? Скорее всего, у вас нет прав доступа к некоторым файлам в папке (системные файлы) или они открыты другой программой с блокировкой. Добавьте обработку ошибок On Error Resume Next в код макроса.