【VBA】フォルダ作成を一括で処理する方法!初心者でもできる効率化テクニック
100個のフォルダを一つ一つ新規作成する。。。100個のフォルダ名を一つ一つコピペしてリスト化する。。。
手作業だとて時間ばかりかかって疲れ果ててしまいますよね。
こんな作業は
『フォルダ作成を一括処理するVBA』で自動化
することができます。
『フォルダ作成を一括処理するVBA』を使えば、
1000個のフォルダでも一瞬で作成可能
です。
この記事では、フォルダ作成に使われるMkDirの基本から階層フォルダの応用まで、コピペで使えるコードを解説します。
手間と時間のかかるファルダ作成業務を自動化させちゃいましょう。
フォルダ作成を一括処理する基本コード
『フォルダ作成を一括処理するVBA』の基本的な仕組みは、
MkDirステートメントを使ってフォルダを作成し、Excelのセルからフォルダ名を読み取り、For文で繰り返し処理を行う
という内容です。
この方法を覚えれば、100個でも1000個でもフォルダを一瞬で作成できるようになります。
まずは基本的な3つの要素から理解していきましょう。
MkDirステートメントの基本構文
MkDirステートメントは新しいフォルダを作成するVBAの命令文です。
Windowsのファイルシステムにフォルダを直接作成する仕組みで処理速度が速い
という特徴があります。
基本的な書き方がこちら
MkDir "C:\新しいフォルダ"
MkDirの後にフォルダのパスを指定するだけ
デスクトップに「テストフォルダ」を作るコードがこちら
MkDir "C:\Users\ユーザー名\Desktop\テストフォルダ"
以上がMkDirの基本的な使い方なのでしっかりと覚えておいてください。
セルのリストからフォルダ名を取得する方法
Excelのセルからフォルダ名を取得することで、動的にフォルダを作成できるようになります。
この方法の特徴は、
フォルダ名をExcel上で簡単に編集できるため、VBAコードを修正せず目的のフォルダを作成できること
です。
リストからフォルダ作成を一括処理するVBAのサンプルコードがこちら
Sub フォルダ作成()
Dim FP As String
FP = "C:\Users\takub\OneDrive\デスクトップ"
gyo = Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To gyo
MkDir FP & "\" & Cells(i, 1).Value & Cells(i, 2).Value
Next
End Sub
上記のコードは
デスクトップにA列+B列のファイル名でフォルダを作成する
という内容です。
実行結果がこちら
リスト内容と同じ名前でフォルダを作成することができました。
関連記事「ファイル情報を取得するマクロ」では、『リストからフォルダ作成を一括処理するVBA』が設定されたエクセルファイルをダウンロードすることができます。
For文を使った繰り返し処理の書き方
For~Next文は、
指定する回数分処理を繰り返す
ことができます。
基本的な書き方は For i = 1 To 10 のように、開始値から終了値まで変数iを1つずつ増やしながら処理を繰り返します。
For i = 1 To 10
MkDir "C:\MyFolder\" & Cells(i, 1).Value
Next i
上記のコードは
A列のテキスト内容を取得し10個のフォルダを作成する
という内容です。
For~Nextを自由に扱うことができれば、大量のフォルダ作成も一瞬で処理できるようになります。
関連記事「For~Nextの使い方」では、エクセル業務でよく使われる『繰り返し処理VBA』の作り方が紹介されています。
階層フォルダの一括作成する応用テクニック
階層フォルダの作成は、より実践的なファイル管理を可能にする高度なテクニックです。
親フォルダの下に子フォルダを自動で作成することで、組織的なファイル構造を効率的に構築できます。
階層を区別するVBAを扱うことができれば、プロジェクト管理や部署別のファイル整理など、複雑な業務要件にも対応可能できるようになります。
ここからは、
階層構造の理解とエラー対処法、そしてExcelでの管理方法の3つのポイント
ご紹介します。
深い階層フォルダを作成するコード
深い階層フォルダを作成するには、パスを適切に連結して段階的に作成する必要があります。
これは、
一度に深い階層を作成しようとするとエラーが発生する可能性があるため
です。
エラーの発生を完全に防ぐ方法は、
フォルダのパスを完全に指定すること
です。
こんな感じ
MkDir "C:\親フォルダ\子フォルダ\孫フォルダ"
たとえば、年度別にプロジェクトフォルダを作成する場合のサンプルコードがこちら
MkDir "C:\Projects\2024\営業部\第1四半期"
MkDir "C:\Projects\2024\営業部\第2四半期"
MkDir "C:\Projects\2024\営業部\第3四半期"
MkDir "C:\Projects\2024\営業部\第4四半期"
コードで階層を指定することで、
階層が深くなってもエラーの発生を防ぐ
ことができます。
このように階層を意識してパスを組み立てることで、組織的なファイル管理システムの構築が可能です。
親フォルダが存在しない場合の対処法
親フォルダが存在しない状態で子フォルダを作成しようとするとエラーが発生してしまいます。
この問題を解決する最も確実な方法は、
Dir関数を使って親フォルダの存在を確認すること
です。
フォルダの存在を確認するサンプルコードがこちら
If Dir("C:\親フォルダ", vbDirectory) = "" Then
MkDir "C:\親フォルダ"
上記のコードは
もし「親フォルダ」が存在しない場合、「親フォルダ」を作成する
という内容です。
たった2行のコードで、
親フォルダが存在しない状態で子フォルダの作成で発生するエラーを完全に防ぐ
ことができます。
フォルダ作成VBAにおいて、『フォルダの存在を確認するコード』は重宝されるコードなので、しっかり覚えておきましょう。
階層構造をExcelで管理する方法
階層構造をExcelで管理することで、複雑なフォルダ構成も視覚的に理解しやすくなります。
FileSystemObjectを使えば、
ファイルの詳細情報取得、サブフォルダの再帰的検索、そして複雑な文字列操作まで、
あらゆるファイル操作の自動化が可能です。
指定するフォルダ以降、全てのファイル名を階層別でリスト化するサンプルコードがこちら
Sub FileNameParsing()
Dim fso As Object
Dim fullPath As String
Dim folder As String
folder = "H:\ブログ関係\Excel"
Set fso = CreateObject("Scripting.FileSystemObject")
Call RecursiveFileSearch(folder)
End Sub
Sub RecursiveFileSearch(folderPath As String)
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim subFolder As Object
Dim i As Long
Dim LastColumns As Long
i = 1
LastColumns = Cells(1, Columns.Count).End(xlToLeft).Column
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)
'現在フォルダのファイルを処理
For Each file In folder.Files
Cells(i, LastColumns + 1) = file.Name
i = i + 1
Next file
'サブフォルダを再帰的に処理
For Each subFolder In folder.SubFolders
RecursiveFileSearch subFolder.Path
Next subFolder
End Sub
実行結果がこちら
ファイル数が多くて表示しきれませんでしたが、
指定したフォルダ以降、全てのファイル名を階層別に取得しリスト化
することができました。
ファイル名をリスト化するのではなく、フルパス情報をリスト化すれば、
階層構造の把握と修正に役立てることも可能です。
関連記事「ファイル名を取得するVBA」では、フォルダ情報を取得するFileSystemObjectの使い方が詳しく解説されています。
すぐに使えるフォルダ作成VBAコードサンプル集
エクセル業務でよく使われる3種類の『フォルダ作成を一括処理するVBA』をご紹介します。
- 基本的なフォルダ作成VBA
- 階層に対応できるフォルダ作成
- エラーハンドリングを搭載したフォルダ作成
コピペしてすぐに使えるサンプルコードを掲載しているので、どのような処理が実行されるのかコードを動かして試してみてください。
これらのサンプルコードをベースに自分の業務に合わせてカスタマイズしていけば、
オリジナルの自動化ツールを作成できるようになります。
サンプルコードを使って手間のかかるエクセル作業を自動化しちゃいましょう。
基本的なフォルダ一括作成コード
『基本的なフォルダ一括作成VBA』のサンプルコードがこちら
Sub CreateFolders()
Dim i As Integer
Dim folderName As String
Dim basePath As String
basePath = "C:\MyFolders\"
For i = 1 To 10
folderName = Cells(i, 1).Value
If folderName <> "" Then
MkDir basePath & folderName
End If
Next i
End Sub
実行結果がこちら
上記コードは、
A1からA10までのセルに書かれたフォルダ名を読み取り、指定したパスに一括でフォルダを作成する
という内容です。
シンプルで理解しやすく、初心者にとって最適なスタートポイントとなるでしょう。
階層フォルダ対応コード
階層フォルダに対応したコードは、より複雑な業務要件に対応できる高機能版です。
複数の階層を同時に作成できるため、組織的なファイル管理業務で役立つでしょう。
階層フォルダに対応したフォルダ作成VBAのサンプルコードがこちら
Sub CreateHierarchyFolders()
Dim i As Integer
Dim parentFolder As String
Dim childFolder As String
Dim fullPath As String
Dim basePath As String
basePath = "C:\Projects\"
For i = 1 To 20
parentFolder = Cells(i, 1).Value
childFolder = Cells(i, 2).Value
If parentFolder <> "" Then
fullPath = basePath & parentFolder
If Dir(fullPath, vbDirectory) = "" Then
MkDir fullPath
End If
If childFolder <> "" Then
fullPath = fullPath & "\" & childFolder
MkDir fullPath
End If
End If
Next i
End Sub
実行結果がこちら
上記のコードは
A列の名前で「親フォルダ」を作成し、「親フォルダ」内にB列の名前で「子フォルダ」を作成する
という内容です。
親フォルダと子フォルダを同時に作成すると同時に既存フォルダのチェックができる実用的なVBAとなっています。
エラーハンドリング付き完全版コード
エラーハンドリング付きのVBAコードの設定は、
エクセル業務への導入において必要不可欠な対策
です。
予期しないエラーが発生しても適切に処理できるため、VBA未経験者でも安心して使用できます。
エラーハンドリング付きのサンプルコードがこちら
Sub CreateFoldersComplete()
Dim i As Integer
Dim folderName As String
Dim fullPath As String
Dim basePath As String
Dim errorCount As Integer
basePath = "C:\MyFolders\"
errorCount = 0
On Error GoTo ErrorHandler
For i = 1 To 100
folderName = Cells(i, 1).Value
If folderName <> "" Then
fullPath = basePath & folderName
If Dir(fullPath, vbDirectory) = "" Then
MkDir fullPath
Cells(i, 2).Value = "作成完了"
Else
Cells(i, 2).Value = "既に存在"
End If
End If
Next i
MsgBox "フォルダ作成が完了しました。エラー数: " & errorCount
Exit Sub
ErrorHandler:
errorCount = errorCount + 1
Cells(i, 2).Value = "エラー: " & Err.Description
Resume Next
End Sub
上記のコードは、
実行中にエラーが発生しても処理を継続し、結果をB列に表示する。さらにエラーの内容を表示する
という内容です。
業務での実用性を重視しつつ、デバックしやすいようエラー内容を一目で確認できる仕様になっています。
関連記事「エラーを無視するResume Nextの使い方」では、エクセル業務でよく活用されるエラーハンドリングの方法が紹介されています。
VBAでエクセル業務の効率化を実現
VBAを活用することで、エクセルでの日常業務を劇的に効率化できます。
VBAを使えば、
繰り返し作業の自動化によって人的ミスを削減し、作業時間を大幅に短縮する
ことが可能です。
毎日行っているデータ集計やレポート作成を自動化すれば、数時間かかっていた作業がボタン一つで数分で完了します。
エクセル作業が多い環境ではVBAの導入は必須事項である!といっても過言ではありません。
マクロを導入するメリット
マクロを導入する最大のメリットは、作業時間の短縮と品質の向上を同時に実現できることです。
人間が時間をかけて行う単純作業をコンピュータが正確かつ高速に処理することができます。
たとえば、手作業で1時間かかっていたデータ整理が、マクロなら数秒で完了し、さらに計算ミスや入力間違いも完全に防げます。
また、一度作成したマクロは何度でも使い回せるため、長期的な業務効率化投資としても非常に価値があります。
結果として、マクロ導入は時間コストの削減と業務品質の向上という二重のメリットをもたらします。
VBA学習の始め方
VBA学習の最も効果的な始め方は、実際の業務課題から出発することです。
目的が明確な学習は記憶定着率が高く、モチベーションも維持しやすいのは間違いありません。
たとえば、毎週行っているデータ集計作業を自動化することを目標に設定し、必要な機能から順番に覚えていけば実践的なスキルがすぐに身につきます。
基本的な変数の使い方から始まり、ループ処理、条件分岐、配列など、段階的にレベルアップしていくことで、確実にVBAをマスターできます。
関連記事「VBA初心者必見!マクロの作り方」では、コードを書く画面の開き方や書いたコードの実行方法が図やサンプルコードを使って紹介されています。
マクロの開発を外注依頼する
業務内容に合わせた効率化マクロを導入したいけど、VBAコードを開発する時間がない。。。どうやってプログラムを組めばいいかわからない。。。
このような方は、マクロ開発を外注に依頼しちゃいましょう。
外注依頼することで本業に集中しながら高品質なマクロを即座に導入することができます。
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
効率化マクロを導入してエクセル業務の効率をアップさせましょう。