ファイル操作

【VBA】フォルダを新規作成する方法

更新日:2024/01/18

VBAでフォルダを新規作成する方法をお伝えします。

 

フォルダを新規作成する関数とメソッド

VBAでフォルダを新規作成する方法は3つあります。

  1. MkDirステートメント
  2. FileSystemObjectオブジェクトCreateFolderメソッド
  3. FolderオブジェクトのSubFoldersプロパティ(Folderコレクション)のAddメソッド

通常は1のMkDirステートメントを使用します。

2のCreateFolderメソッドは、フォルダ作成後にFolderオブジェクトを取得します。
このオブジェクトを使用して、属性の変更やフォルダ内部にサブフォルダやファイルを作成できます。

3のAddメソッドは、2のCreateFolderメソッドやGetFolderメソッドなどで取得したFolderオブジェクト内にサブフォルダを追加できます。
階層的にサブフォルダを作成するときなどに便利です。

 

MkDirステートメント

MkDirステートメントは、VBAのファイル操作に関する関数ステートメント(戻り値の無い関数)の一つです。
フォルダを新規作成します。

構文

MkDir Path
  1. Path: 作成するフォルダパス

フォルダが存在しているとき、エラーが発生します。

使用例

MkDirステートメントの使用例です。
フォルダが存在するなどで発生したエラーをエラー処理ルーチンで補足しています。

Sub mkDirSample()
    Const folderName As String = "C:\Users\xxx\Documents\folder1"

    On Error GoTo ErrorHandler
    MkDir folderName

    MsgBox "フォルダを作成しました"

FinalHandler:
    On Error GoTo 0

    Exit Sub

ErrorHandler:
    MsgBox Err.Description & "(" & Err.Number & ")", vbCritical & vbOKOnly, "エラー"
    Resume FinalHandler
End Sub

 

CreateFolderメソッド

CreateFolderメソッドは外部ライブラリのWindows Script Runtimeに含まれているFileSystemObjectオブジェクトのメンバーです。

CreateFolderメソッドを使用するには、まずはFileSystemObjectオブジェクトを取得する必要があります。

FileSystemObjectオブジェクトの取得方法は二つあります。
一つは、文字列"Scripting.FileSystemObject"をCreateObject関数に渡す方法です。

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

もう一つはVBエディタのメニュー:ツールから参照設定画面を開いて『Microsoft Scriptiong Runtime』を参照設定してから次のコードを実行する方法です。

Dim fso As New Scripting.FileSystemObject

参照設定をおこなうと、コード入力時にメソッド名候補が表示されます。
入力ミスを防げるので便利です。

構文

FileSystemObjectオブジェクト.CreateFolder Path  
  1. Path: 作成するフォルダパス

存在するフォルダを指定すると、エラーです。

作成したフォルダを参照するFolderオブジェクトを返します。
このオブジェクトを使用して、ファイルやサブフォルダを作成できます。

使用例

CreateFolderメソッドの使用例です。

Sub createFolderSample()
    Const folderName As String = "C:\Users\xxx\Documents\folder1"
    
    Dim fso As New Scripting.FileSystemObject

    On Error GoTo ErrorHandler
    
    fso.CreateFolder folderName
    MsgBox "フォルダを作成しました"

FinalHandler:
    On Error GoTo 0

    Exit Sub

ErrorHandler:
    MsgBox Err.Description & "(" & Err.Number & ")", vbCritical & vbOKOnly, "エラー"
    Resume FinalHandler
End Sub

 

Addメソッド

Addメソッドは、Folderオブジェクトのサブフォルダを管理するSubFoldersプロパティ(Folderコレクション)が所持しているメソッドです。
これを実行することでフォルダが作成され、Folderコレクションに情報がセットされます。

Folderオブジェクトは、FileSystemObjectオブジェクトのGetFolderメソッドで取得します。

Folderオブジェクトのプロパティについては、次のリンク先を確認してください。
Folderオブジェクトのプロパティ|【VBA】フォルダの情報をサクッと取得する方法

構文

親フォルダを取得後に、フォルダを作成します。

set Folderオブジェクト = FileSystemObjectオブジェクト.GetFolder( ParentFolderPath )
Folderオブジェクト.SubFolders.Add( name )
  1. ParentFolderPath: 親フォルダのパス
  2. name: フォルダの名前

Addメソッドは、作成したフォルダを参照するFolderオブジェクトを返します。

使用例

Addメソッドの使用例です。

Sub addSample()
    Const ParentFolderPath As String = "C:\Users\xxx\Documents"
    Const folderName = "folder1"
    
    Dim fso As New Scripting.FileSystemObject
    Dim fo As folder
    Dim fo2 As folder
    
    On Error GoTo ErrorHandler

    Set fo = fso.GetFolder(ParentFolderPath)
    Set fo2 = fo.SubFolders.Add(folderName)
    MsgBox fo2.name & "を作成しました"
     
FinalHandler:
    On Error GoTo 0

    Exit Sub

ErrorHandler:
    MsgBox Err.Description & "(" & Err.Number & ")", vbCritical & vbOKOnly, "エラー"
    Resume FinalHandler
End Sub

更新日:2024/01/18

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。