EXCELで作成したフォルダ名リストを使ってフォルダを自動作成する

2023年4月16日

業務の関係でサーバーやパソコン上に決まったフォルダを定期的に作成することはないでしょうか。業務で使っているサーバーでは勝手にバッチファイルを実行することが許されていない場合があります。そんな時ExcelVBAを使うとサーバー上でも問題なくフォルダを自動作成することができます。今回はEXCEL上に作成したフォルダ名リストを使ってフォルダを作成する方法について説明します。
ファイルの移動/コピーを自動化する方法については下記リンク先をご覧ください。
  https://scodebank.com/?p=781

サンプルアプリ実行動作

「フォルダ作成」ボタンをクリックするとリスト上で指定したパスにフォルダが作成されます。
「フォルダ削除」ボタンをクリックすると作成されたフォルダが削除されます。

サンプルコードの処理内容

FileSystemObjectオブジェクトを利用するとドライブ・フォルダ・ファイルなどを簡単に操作できます。
今回はFileSystemObjectオブジェクトを使ってフォルダの作成と削除処理をします。
以下に処理手順の概要を説明します。

【フォルダ作成手順】
FileSystemObjectを入れるための変数を定義します。
 Dim objFSO As Object
     ↓
objFSOというオブジェクトにFileSystemObjectを代入します。
 Set objFSO = CreateObject(“Scripting.FileSystemObject")
     ↓
フォルダ作成先パスをpass変数に格納します
 pass = kaiso01 & “\" & kaiso02
     ↓
pass変数で指定した先に「objFSO.CreateFolder」メソッドを使ってフォルダを作成します。
 objFSO.CreateFolder pass

【フォルダ削除手順】
フォルダを削除する際はワイルドカード「*」を使ってパスを指定します。
「objFSO.DeleteFolder D:\フォルダ作成テスト\*」 とすることで「D:\フォルダ作成テスト」フォルダ内をすべて削除します。

削除先フォルダのパスを指定
  pass = kaiso01 & “\" & “
    ↓
「objFSO.DeleteFolder」メソッドを使ってフォルダを削除します。
 objFSO.DeleteFolder pass

FileSystemObject オブジェクトのメソッドとプロパティは下記リンク先をご覧ください。

https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/filesystemobject-object

サンプルコード     コードの作成手順はこちら

Option Explicit

Sub フォルダ作成()

 'ワークシートを指定する
  Dim Sh1 As Worksheet
  Set Sh1 = ThisWorkbook.Worksheets("Sheet1")

 '変数を定義
  'ループカウント変数
  Dim i As Integer
  '保存先パスを格納する変数
  Dim kaiso01, kaiso02, pass As String

 'コンピューターのファイル システムへアクセスするための準備
  'FileSystemObjectを入れるための変数を定義
  Dim objFSO As Object
  'objFSOというオブジェクトにFileSystemObjectを代入
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  
 '北海道(5行目)から沖縄(51行目)までループ 
  For i = 5 To 51

   'フォルダ作成先のパスを格納
    '1階層目のパスを格納
    kaiso01 = Sh1.Cells(i, 2).Value
    '2階層目のパスを格納
    kaiso02 = Sh1.Cells(i, 3).Value

   'フォルダ作成先パスをpass変数に格納
    pass = kaiso01 & "\" & kaiso02
    
   'フォルダ作成
    objFSO.CreateFolder pass

  Next i

  'objFSO変数をリセット
   Set objFSO = Nothing

  '完了メッセージの表示
   MsgBox "処理が完了しました。"

End Sub

'------------------------------------------------------------

Sub フォルダ削除()

 'ワークシートを指定する
  Dim Sh1 As Worksheet
  Set Sh1 = ThisWorkbook.Worksheets("Sheet1")

 '変数を定義します。
  'ループカウント変数
  Dim i As Integer
  '保存先パスを格納する変数
  Dim kaiso01, pass As String

 'コンピューターのファイル システムへアクセスするための準備
  'FileSystemObjectを入れるための変数を定義
  Dim objFSO As Object
  'objFSOというオブジェクトにFileSystemObjectを代入
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  
  'フォルダ削除先のパスを格納
  kaiso01 = Sh1.Cells(5, 2).Value

  '削除先フォルダのパスを指定
  pass = kaiso01 & "\" & "*"

  'フォルダ削除
  objFSO.DeleteFolder pass

  'objFSO変数をリセット
  Set objFSO = Nothing

  '完了メッセージの表示
  MsgBox "処理が完了しました。"

End Sub