【VBA】フォルダを新規作成する方法
更新日:2024/01/18
VBAでフォルダを新規作成する方法をお伝えします。
フォルダを新規作成する関数とメソッド
VBAでフォルダを新規作成する方法は3つあります。
- MkDirステートメント
- FileSystemObjectオブジェクトのCreateFolderメソッド
- FolderオブジェクトのSubFoldersプロパティ(Folderコレクション)のAddメソッド
通常は1のMkDirステートメントを使用します。
2のCreateFolderメソッドは、フォルダ作成後にFolderオブジェクトを取得します。
このオブジェクトを使用して、属性の変更やフォルダ内部にサブフォルダやファイルを作成できます。
3のAddメソッドは、2のCreateFolderメソッドやGetFolderメソッドなどで取得したFolderオブジェクト内にサブフォルダを追加できます。
階層的にサブフォルダを作成するときなどに便利です。
MkDirステートメント
MkDirステートメントは、VBAのファイル操作に関する関数ステートメント(戻り値の無い関数)の一つです。
フォルダを新規作成します。
構文
MkDir Path
- 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オブジェクトのメンバーです。
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
- 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オブジェクトのプロパティ|【VBA】フォルダの情報をサクッと取得する方法
構文
親フォルダを取得後に、フォルダを作成します。
set Folderオブジェクト = FileSystemObjectオブジェクト.GetFolder( ParentFolderPath ) Folderオブジェクト.SubFolders.Add( name )
- ParentFolderPath: 親フォルダのパス
- 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
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。