EXCEL VBA 業務効率化の秘訣、業務で活用できる便利な自動フォルダ生成テクニック3選(テクニック)
EXCEL VBA 業務効率化の秘訣、業務で活用できる便利な自動フォルダ生成テクニック3選(テクニック)
Excel VBAは、日々の事務作業を効率化する強力なツールです。特に、フォルダ作成という繰り返し発生するタスクを自動化することで、大幅な時間節約が可能になります。本記事では、Excel VBAを使用して指定された要件に基づくフォルダ作成スクリプトの作成方法を紹介します。このスクリプトは、指定されたパスにワークシートのデータを基にフォルダを作成し、ユーザーがフォルダの作成場所をダイアログボックスで選択できるように設計されています。また、既存の同名フォルダがある場合は新たに作成しないという賢い機能も備えています。この一連のプロセスは、プロジェクト管理、顧客管理、イベント計画、財務・会計文書の整理、人事・従業員管理など、ファイル管理にわたる業務に応用可能です。本記事では、このVBAコードを実務にどのように活用できるか、実用的な例を交えて解説していきます。自動化により、文書管理の効率化とデータ整理の一貫性を高め、業務の質を向上させる方法をご紹介します。
●【EXCEL VBA Dir関数(2)ファイル操作・フォルダー・サブフォルダー操作については、下記を参照して下さい】
●【MkDir ステートメント(Excel)、下記を参照して下さい。(Microsoft社 様)】
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/mkdir-statement
EXCEL VBA 指定した場所にフォルダーを自動生成① (EXCELシートに登録したフォルダー名を生成)
今回説明するプログラムは、Excelの特定のシートから読み取ったフォルダ名を使用して、ユーザーが選択した場所に新しいフォルダーを作成するプログラムです。既に同名のフォルダーが存在する場合は、そのフォルダーの作成をスキップします。それでは、順番に説明いたします。
【プログラムの流れ】
Sheet1
という名前のワークシートを取得します。- ユーザーにフォルダーを作成する場所を選択させるダイアログボックスを表示します。
- 選択された場所のパスを取得します。
- ワークシートのA列からフォルダ名を読み取ります。
- 2行目から最後の行まで、各行のフォルダー名に対して以下の処理を実行します。
※フォルダ名ーが空でなく、既に同名のフォルダーが存在しない場合、その名前でフォルダーを作成します。
【プログラム実行条件・注意事項】
- ユーザーが正しい場所を選択していることを確認してください。
Sheet1
や列の指定は、実際のExcelファイルの構成に合わせて変更する必要があります。- VBAでのフォルダー操作が許可されていることを確認してください。
- 同名のフォルダーが既に存在する場合、そのフォルダーは作成されません。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● automatic_folder_creation01(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
' ' Option Explicit ' 明示的な変数宣言を強制する(エラーを未然に防ぐため) ' 指定した場所にフォルダーを生成するサブルーチン Sub CreateFolders() ' 対象となるワークシートの変数を宣言 Dim ws As Worksheet ' "Sheet1"という名前のワークシートを変数wsにセット Set ws = ThisWorkbook.Sheets("Sheet1") ' フォルダのパスを格納するための文字列変数を宣言 Dim folderPath As String ' ファイルダイアログを開き、フォルダの作成場所をユーザーに選択させる With Application.FileDialog(msoFileDialogFolderPicker) .Title = "フォルダーを作成する場所を選択してください" ' ダイアログのタイトルを設定 .AllowMultiSelect = False ' 複数選択を不可に設定 If .Show <> -1 Then Exit Sub ' ダイアログがキャンセルされたらサブルーチンを終了 folderPath = .SelectedItems(1) & "\" ' 選択されたフォルダのパスを取得し、末尾に\を追加 End With ' ワークシートの最終行を特定するための変数を宣言 Dim lastRow As Long ' A列の最終行を取得 lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' ループカウンタ変数を宣言 Dim i As Long ' 2行目から最終行までループを回す(1行目はヘッダー等の想定) For i = 2 To lastRow ' フォルダ名を格納するための変数を宣言 Dim folderName As String ' 現在の行のA列の値(フォルダ名)を取得 folderName = ws.Cells(i, 1).Value ' フォルダ名が空でない、かつ既に同名のフォルダが存在しない場合 If folderName <> "" And Dir(folderPath & folderName, vbDirectory) = "" Then ' 指定されたパスに新しいフォルダを作成 MkDir folderPath & folderName End If Next i ' 次の行に移動 End Sub ' |
(画面クリックして拡大)
EXCEL VBA 指定したフォルダー名で指定した場所にフォルダー名でメインフォルダとサブフォルダーを自動生成②
今回説明するプログラムは、上記で説明したましたサンプルプログラム①の応用となります。今回のプログラムでは、EXCELシートに登録されているデータを元にメインフォルダーとサブフォルダーを作成します。具体的には、A列に登録されているデータは、メインフォルダー、その同行に登録されているB列のデータサブフォルダーとしてA列のメインフォルダー内にサブフォルダーが作成されます。なお、既に同名のフォルダが存在する場合は、そのフォルダの作成をスキップします。それでは、順番に説明いたします。
【プログラムの流れ】
1.ワークシートを設定:Sheet1を操作対象のシートとして設定します。
2.フォルダーの基本パスをユーザーが選択:ファイルダイアログを使用して、フォルダーを作成する基本パスをユーザーに選択させます。
3.最終行の取得:Sheet1のA列の最終行を取得します。
4.ループ処理:2行目から最終行まで、各行のA列(メインフォルダー名)とB列(サブフォルダー名)を読み取ります。
5.フォルダーの作成:メインフォルダがまだ存在しない場合、基本パスにメインフォルダーを作成します。続いて、同様にサブフォルダーが存在しない場合、メインフォルダ内にサブフォルダーを作成します。
【プログラム実行条件・注意事項】
1.フォルダー名の重複:既に同名のフォルダーが存在する場合、新たにフォルダーは作成されません。
2.エラーハンドリング:このコードにはエラーハンドリングが含まれていないため、予期せぬエラーが発生する可能性があります(例:アクセス権限の不足、無効なフォルダー名)。
3.ユーザーの操作:ユーザーがファイルーダイアログでキャンセルを選択すると、コードは何もせずに終了します。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● automatic_folder_creation02(サンプルプログラム)
(画面クリックして拡大)
EXCEL VBA 指定したフォルダー名で指定場所にメインフォルダーと複数のサブフォルダーを自動生成③
今回説明するプログラムは、上記で説明したましたサンプルプログラム②の応用となります。今回のプログラムでは、EXCELシートに登録されているデータを元にメインフォルダーと複数のサブフォルダーを作成します。具体的には、A列に登録されているデータは、メインフォルダー、その同行に登録されているB列以降のデータサブフォルダーとしてA列のメインフォルダー内にサブフォルダーが作成されます。なお、既に同名のフォルダーが存在する場合は、そのフォルダーの作成をスキップします。それでは、順番に説明いたします。
【プログラムの流れ】
1.Sheet1という名前のワークシートを選択します。
2.ユーザーがフォルダーを作成する場所を選択できるように、ファイルダイアログを開きます。
3.選択されたパスをbasePath変数に格納します。
4.Sheet1のA列で最終行を検出します。
5.2行目から最終行まで各行をループ処理します。
6.各行のA列からメインフォルダー名を取得します。
7.メインフォルダーがまだ存在しない場合、それを作成します。
8.同じ行のB列以降のセルをループ処理し、サブフォルダー名を取得します。
9.各サブフォルダーがまだ存在しない場合、それを作成します。
【プログラム実行条件・注意事項】
1.ワークシートの名前がSheet1であることを確認する必要があります。
2.A列にメインフォルダー名、B列以降にサブフォルダー名が記載されている必要があります。
3.フォルダー名が空のセルは無視されます。
4.既に同名のフォルダーが存在する場合、新たに作成されません。
5.フォルダーの作成場所はユーザーがファイルダイアログで選択する必要があります。
【実行結果・例】
上記のフォルダーを作成する条件で実行すると、ユーザーが指定したパスに以下のフォルダ構造が作成されます(サンプルデータに基づく)
選択されたパス
・MainFolder1
・・・・SubFolder1-1
・・・・SubFolder1-2
・MainFolder2
・・・・SubFolder2-1
・・・・SubFolder2-2
・・・・SubFolder2-3
・・・・SubFolder2-4
・・・・SubFolder2-5
※MainFolder2まで再現しております。
既に存在するフォルダは作成されません。また、空のセルがあれば、その行のその部分についてはフォルダが作成されません。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● automatic_folder_creation03(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
' ' Option Explicit ' 明示的な変数宣言を強制する(エラーを未然に防ぐため) ' 指定した場所にフォルダーを生成するサブルーチン Sub CreateSubFolders03() ' 対象となるワークシートの変数を宣言 Dim ws As Worksheet ' "Sheet1"という名前のワークシートを変数wsにセット Set ws = ThisWorkbook.Sheets("Sheet1") ' フォルダのパスを格納するための文字列変数を宣言 Dim basePath As String ' ファイルダイアログを開き、フォルダの作成場所をユーザーに選択させる With Application.FileDialog(msoFileDialogFolderPicker) .Title = "フォルダーを作成する場所を選択してください" ' ダイアログのタイトルを設定 .AllowMultiSelect = False ' 複数選択を不可に設定 If .Show <> -1 Then Exit Sub ' ダイアログがキャンセルされたらサブルーチンを終了 basePath = .SelectedItems(1) & "\" ' 選択されたフォルダのパスを取得し、末尾に\を追加 End With ' ワークシートの最終行を特定するための変数を宣言 Dim lastRow As Long ' A列の最終行を取得 lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' ループカウンタ変数を宣言 Dim i As Long, j As Integer ' 2行目から最終行までループを回す(1行目はヘッダー等の想定) For i = 2 To lastRow ' メインフォルダ名を格納するための変数を宣言 Dim mainFolderName As String ' 現在の行のA列の値(メインフォルダ名)を取得 mainFolderName = ws.Cells(i, 1).Value ' メインフォルダ名が空でない、かつ既に同名のフォルダが存在しない場合 If mainFolderName <> "" And Dir(basePath & mainFolderName, vbDirectory) = "" Then ' メインフォルダを作成 MkDir basePath & mainFolderName End If ' B列以降のサブフォルダの処理 For j = 2 To ws.Cells(i, Columns.Count).End(xlToLeft).Column ' サブフォルダ名を格納するための変数を宣言 Dim subFolderName As String ' 現在の行のj列の値(サブフォルダ名)を取得 subFolderName = ws.Cells(i, j).Value ' サブフォルダ名が空でない、かつ既に同名のサブフォルダが存在しない場合 If subFolderName <> "" And Dir(basePath & mainFolderName & "\" & subFolderName, vbDirectory) = "" Then ' サブフォルダを作成 MkDir basePath & mainFolderName & "\" & subFolderName End If Next j Next i ' 次の行に移動 End Sub ' ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。