Как получить список файлов в Excel с помощью VBA

Специально для примера я создал папку, в которой разместил несколько файлов различных типов и две подпапки. Вот так они выглядят:

Давайте рассмотрим несколько способов получения списка файлов.
Способ 1. Использование функции Dir
Этот способ хорош тем, что в данном случае мы не подключаем дополнительных библиотек, а пользуемся только предустановленным функционалом. Способ подойдет, если вам необходимо просто получить список файлов в папке и не нужно выводить их размер, определять тип файла, дату его создания/изменения и т.п. Тут мы получаем только наименования файлов и больше ничего.
Вот там код данной функции, который выводит на лист 1 перечень файлов.
Тут мы проверяем существование папки с помощью дополнительной функции. Опять таки не используем сторонних библиотек, а используем туже функцию Dir.
Вот так выглядит результат работы функции. Программа записала список файлов на текущий лист Excel.

Здесь мы не делали проверку на тип файла и вывели все файлы которые у нас были.
Если же необходимо отобрать только определенные типы файлов, например Excel файлы, то в нашем коде необходимо сделать дополнительную проверку:
Знак "*" означает любой набор символов. Таким образом, мы учли различные версии файлов Excel (xls, xlsx, xlsm).
Способ 2. Используем объект FileSystemObject
В данном случае мы будем не просто получать названия файлов, но также определять тип файла, получать его размер и дату создания. Для этого нам потребуется использовать объект FileSystemObject. Он предоставляет нам сведения о файловой системе компьютера.
Однако, чтобы начать его использовать придется подключить одну библиотеку. Не пугайтесь, она есть на всех компьютерах с Windows, потому скачивать ничего не придется. Чтобы подключить ее необходимо:
- Открыть пункт меню Tools и выбрать пункт References.

- Выбрать ссылку на библиотеку Microsoft Scripting Runtime.

- Нажать Ок.
Теперь перейдем к коду. Он немного упростился:
Обратите внимание на переменные. Переменная FSO — это новый экземпляр объекта FileSystemObject. Тут мы его объявляем и сразу создаем. Директива New очень важна, многие тут допускают ошибку. Также создаем объекты MyFolder и iFile — это тоже объекты FileSystemObject
Далее делаем проверку на существование папки. В данном случае нам не нужна дополнительная функция , мы пользуемся методом FolderExists объекта (класса) FileSystemObject.
Ну и остается аналогично перебрать все файлы в директории. Тут удобно использовать цикл For Each — Next.
Результат работы программы следующий:

Способ 3. Создаем функцию, которая возвращает файлы в папке и подпапках
Напоследок разберем функцию, которая будет возвращать нам все файлы в текущей папке и во вложенных папках. Вообще это универсальная функция, которая подойдет на все случаи жизни. Смело копируйте ее в свой проект!
Итак перейдем к коду:
Разберем основные моменты этой функции. На вход она принимает один обязательный аргумент — это путь к папке Path. Также может принимать два необязательных параметра:
- Filter — перечисление списка файлов, которые мы хотим получить. Перечислять необходимо через запятую, например "doc, xls*". Вы можете использовать символ "*" чтобы включить сравнение по шаблону. По умолчанию фильтр отсутствует и возвращаются все типы файлов.
- Nesting — вложенность. Это максимальное число вложенных папок в которые "проваливается" алгоритм. По умолчанию равно 100.
В целом по алгоритму комментарии лишние, все должно быть понятно. Основной момент хочу обратить на строку 38.
Тут мы рекурсивно вызываем эту же функцию. Т.е. получается что функция вызывает саму себя. И это происходит до тех пор пока либо не останется вложенных папок, либо не будет достигнут желаемый уровень вложенности.
Теперь когда наша функция готова, просто используем ее где нам требуется вот так:
Функция нам возвращает коллекцию файлов в папке и подпапках. Вот так:

Пример файла можете скачать по кнопке ниже и использовать в своей работе. Оставляйте комментарии, буду рад на них ответить.
Можно ли скопировать название папок всех разом?
Простой способ через TotalCommander далее ТС. Открываешь прогу ТС Выделяешь что нужно скопировать (имена) далее в TC жмем Инструменты/ Копировать имена в буфер или другую команду, которая по душе )))
Первые два ответа недостаточно развернуты, упущен важный нюанс, — сначала нужно вбить букву диска и двоеточие — например D: затем нажать enter и проделывать операции выше, а именно
Идешь в Проводник. Заходишь в нужную папку. Щелкаешь по адресной строке и копируешь адрес папки. Теперь запускаешь командную строку (пуск-cmd). Там вбиваешь
«cd адрес_папки» (без ковычек)
Затем когда будет выбрана нужная тебе папка вбиваешь
«dir»
Тебе выкинет название всех файлов и папок. Теперь щелкаешь правой кнопкой по окну ком строки и выбираешь из меню «отметить» или «пометить» (mark) и выбираешь нужные папки затем копировать и вставить в нужное приложение.
Вроде муторно, но на самом деле все очень быстро получается при этом не используя «левые» приложения.
Как быстро создать список файлов из папки и перенести в таблицу «Excel».
Самый простой способ создания списка файлов, расположенных в папке.
Поделюсь простым проверенным способом создания списка файлов. Пошаговое руководство.
Шаг 1. Войти в папку список файлов из которой вы хотите сформировать.

Папка с файлами
Шаг 2. Кликнуть правой кнопкой по пустому полю в папке (не по файлу)

Создать текстовый документ
Шаг 3. Из выпадающего мену выбрать пункт «Создать»>> «Текстовый документ»
Шаг 4. Открыть появившийся текстовый документ и записать в него три строчки с кодом:
- chcp 1251
- echo From Ruexcel.ru %date% %time% >spisok_faylov.txt
- dir /b /d >> spisok_faylov.txt
Шаг 5. Закрыть с сохранением документ.

Закрыть документ с сохранением
Шаг 6. Переименовать расширение файла с «TXT» на «BAT» и нажать кнопку «Enter»

Переименовать файл в BAT
Шаг 7. Запустить полученный файл.

Запуск файла и результат
После запуска .bat файла в папке, из которой вы его запустили появится текстовый документ со списком файлов хранящихся в папке, который будет называться «spisok_faylov.txt».

Готовый список файлов
Перенос списка в программу Excel.
Шаг 1. Открыть текстовый документ.
Шаг 2. Выделить левой кнопкой мыши список.

Выделение списка
Шаг 3. Нажав правой кнопкой мыши по выделению выбрать пункт «Копировать»

Копирование перечня
Шаг 4. Открыть документ Excel.

Вставка в Excel
Шаг 5 Кликнуть правой кнопкой мыши в любую ячейку и выбрать из выпадающего меню пункт «Вставить»
Резултат копирования списка