Создание структуры вложенных папок по списку
Создание большого количества вложенных папок по определённой заданной структуре - весьма типовая и крайне скучная задача. Представьте на секунду, что для сбора данных от каждого отдела в вашей компании вам нужно на сетевом или локальном диске создать отдельную папку, где внутри должны быть подпапки с названиями дирекций (Коммерция, Производство, Финансы), а внутри них отделы (Закупки, Маркетинг...), а внутри некоторых отделов третьим уровнем ещё и рабочие группы:

Легко сообразить, что подобная структура может быть весьма многоуровневой и создание такого "монстра" вручную займёт массу времени. Давайте попробуем автоматизировать подобный процесс с помощью парочки несложных формул и макроса на Visual Basic.
Макрос создания папок по списку
Первой мыслью в подобной ситуации бывает обычно использование команды языка VBA MkDir, которая умеет создавать папку на диске по заданному пути. Например, выражение:
MkDir "C:\Отчёты\Москва\Продажи 2026"
... создаст на диске С в папке Отчёты в подпапке Москва под-подпапку с именем Продажи 2026.
Все кажется предельно простым, но есть пару тонких моментов.
Во-первых, папка, внутри которой мы хотим создать новую (т.е. С:\Отчёты\Москва в примере выше) уже должна существовать на диске С. Если её там нет, то необходимо создать сначала её, а уже потом внутри неё создавать вложенную, иначе эта команда выдаст ошибку. Таким образом при создании сложной многоуровневой структуры нам обязательно придётся выстраивать правильную последовательность - сначала папки, потом подпапки, потом - под-подпапки и т.д.
Во-вторых, если какая-то из папок уже существует на диске, то команда MkDir при попытке повторного создания тоже выдаст ошибку.
Гораздо изящнее будет пойти другим путём и использовать командную строку Windows, где можно легко создать папку с помощью следующей команды:
cmd /c md "C:\Папка1\Папка2\Папка3"
Здесь:
- cmd - запускает командный процессор Windows
- параметр /c уточняет, что после выполнения команды нужно закрыть за собой окно cmd
- команда md создаёт папку по пути, указанному после неё в кавычках
Фишка этой команды в том, что она создаёт сразу всю цепочку вложенных папок, т.е. Папку1, Папку2 и Папку3 сразу. Если же какие-то из папок уже существуют, то команда выполнится без ошибки, ничего не изменяя.
Таким образом, для формирования заданной структуры папок нам потребуется сделать на листе Microsoft Excel список путей для каждой создаваемой папки (в любом порядке и без строгого соблюдения уровней вложенности). Например, так:

Для удобства здесь в отдельной ячейке B1 прописывается корневая папка, в которой нужно создать всю структуру, а затем путь к каждой папке склеивается из этой корневой папки и названий дирекции, отдела и группы из таблицы. Для склейки удобно использовать новую функцию ОБЪЕДИНИТЬ (TEXTJOIN), которая сцепляет текст из исходных ячеек, добавляя между ними разделитель (обратная дробь в первом аргументе) и игнорируя при этом пустые ячейки (второй аргумент = ИСТИНА). В старых версиях Excel, само собой, можно просто склеить содержимое ячеек с помощью символа & или функции СЦЕПИТЬ (CONCATENATE), добавив между ними символ "\" вручную.
После этого останется написать простой макрос, который будет в цикле проходить по выделенным предварительно на листе ячейкам с путями и создавать для каждой из них папку. Для этого выберите на вкладке Разработчик (Developer) команду Visual Basic или нажмите сочетание клавиш Alt+F11. В открывшемся окне редактора макросов вставьте новый пустой модуль через меню Insert - Module и введите туда следующий код:
Sub FoldersCreator()
For Each cell In Selection
Shell "cmd /c md " & Chr(34) & cell & Chr(34)
Next cell
End Sub
Этот макрос:
- проходит в цикле по всем выделенным ячейкам (Selection)
- берёт содержимое очередной ячейки (переменная cell) как путь для создания новой папки
- подклеивает перед и после пути кавычки с помощью функции Chr(34)
- вызывает командную строку и выполняет команду создания папки с помощью Shell
После этого можно вернуться в Excel, выделить диапазон с путями (помечен зелёным на картинке выше) и запустить наш макрос кнопкой Макросы на вкладке Разработчик (Developer - Macros) или сочетанием клавиш Alt+F8. На диске почти мгновенно будет создана требуемая многоуровневая структура папок для будущего хранения файлов.
Добавление вложенных папок
Для полноты картины давайте ещё чуть усложним ситуацию и предположим, что внутри каждой созданной подпапки отдела нам нужно создать вложенные папки для трёх лет: 2025-2027, чтобы размещать там впоследствии файлы за соответствующий год.
Чтобы реализовать такое, необходимо уточнить, что нашему макросу, на самом деле, совершенно не обязательно задавать именно одномерный вертикальный список с путями к создаваемым папкам - с двумерным диапазоном он тоже прекрасно работает. Так что сформировать список путей для подпапок-лет проще всего будет следующим образом:

Здесь мы берем все пути из предыдущего массива и подклеиваем к каждому из них номер года из 3-ей строки, а затем протягиваем эту формулу вниз на все строки и вправо на все годы.
После этого останется выделить диапазон F4:H13 и запустить наш макрос, чтобы создать внутри каждой папки нужное количество вложенных подпапок автоматически.
Ссылки по теме
- Заставка при открытии книги Excel
- Как использовать Личную Книгу Макросов в Excel
- Как обойти блокировку макросов
А для чего нужен & перед первым Chr(34)?
Просто я не знаком с синтаксисом данной конструкции...