こんにちは、Ryoです。
VBAでフォルダに対する処理を行うことは多々あるかと思いますので、File System Objectオブジェクトによるフォルダ操作方法について書いていきます。
1.サンプル概要
サンプルコードを実行するファイルと同じ場所に以下画像のフォルダを準備しています。CopyFolderメソッドを利用して「Dataフォルダ」を「Sampleフォルダ」内へコピーします。
実行後にSampleフォルダ内を確認するとDataフォルダがコピーされています。
移動させたい場合はMoveFolderメソッドを利用します。「移動」なので元の場所からSampleフォルダ内へ移ります。
削除する場合はDeleteFolderメソッドを利用することで指定したフォルダを削除することができます。ここでは準備した「DeleteSampleフォルダ」を指定して削除しています。
以上がサンプル概要になります。
2.サンプルコード
◆フォルダをコピー
Sub Sample1() '※※フォルダをコピーする※※ Dim FSO As Object Dim Adr As String 'FileSystemObjectオブジェクトを作成 Set FSO = CreateObject("Scripting.FileSystemObject") 'コピー対象のフォルダパスを変数に代入 Adr = ThisWorkbook.Path '「Dataフォルダ」を「Sampleフォルダ」にコピーする FSO.CopyFolder Adr & "\Data", Adr & "\Sample\" End Sub
フォルダをコピーするにはCopyFolderメソッドを利用します。
構文:CopyFolder source, destination[, overwrite]
CopyFolderメソッドは指定したフォルダをコピーするもので、引数sourceにコピー元のフォルダ、引数destinationにコピー先を指定します。
引数destination指定したフォルダと同じ名前のフォルダが既に存在している場合、引数overwriteにTrue指定(既定)で上書き、False指定でエラーとなります。
FSO.CopyFolder Adr & “\Data”, Adr & “\Sample\”のようにコピー先のフォルダ名には末尾に「¥」を付けることによってコピー先がフォルダであることを示しています。
◆フォルダを移動
Sub Sample2() '※※フォルダを移動する※※ Dim FSO As Object Dim Adr As String 'FileSystemObjectオブジェクトを作成 Set FSO = CreateObject("Scripting.FileSystemObject") 'コピー対象のフォルダパスを変数に代入 Adr = ThisWorkbook.Path '「Dataフォルダ」を「Sampleフォルダ」内へ移動する FSO.MoveFolder Adr & "\Data", Adr & "\Sample\" End Sub
フォルダを移動するにはMoveFolderメソッドを利用します。
構文:MoveFolder source, destination
MoveFolderメソッドは引数sourceに指定したフォルダを引数destinationに指定したパスに移動します。
サンプルコードではDataフォルダを同階層のSampleフォルダ内へ移動させていますが、MoveFolderメソッドでは移動先に既に同名のフォルダが存在する場合はエラーとなります。
◆フォルダを削除
Sub Sample3() '※※フォルダを削除する※※ Dim FSO As Object Dim Adr As String 'FileSystemObjectオブジェクトを作成 Set FSO = CreateObject("Scripting.FileSystemObject") 'コピー対象のフォルダパスを変数に代入 Adr = ThisWorkbook.Path '「DeleteSample」フォルダを削除する FSO.DeleteFolder Adr & "\DeleteSample" End Sub
フォルダを削除するにはDeleteFolderメソッドを利用します。
構文:オブジェクト.DeleteFolder folderspec[, force]
DeleteFolderメソッドは引数folderspecに指定したフォルダとフォルダ内のファイル全てを削除します。
引数force(既定:False)は省略可能ですが、その場合は削除するフォルダ内に読み取り専用ファイルが有るとエラーとなりますので、読み取り専用ファイルも含めてすべて削除したい場合はTrue指定すればOKです。
サンプルコードでは準備した「DeleteSampleフォルダ」を指定して削除していますが、指定したパス内に削除対象のフォルダが存在しない場合は当然ながらエラーとなります。
3.まとめ
VBAで処理を行う際にファイルやフォルダの操作が発生することは多々ありますので今回紹介したFileSystemObjectオブジェクトによるフォルダ操作を知っておくと何かと役立つことも多いと思います。
注意点としてはコピーを行う際に同名フォルダがあると既定値では上書きしてしまうので、移動処理前の存在確認や引数overwriteのFalse指定などを行っておくと良いです。
以上、フォルダをコピー/移動/削除する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo