Excel VBA入門 | FileSystemObject-CopyFolderメソッド(フォルダのコピー)

Excel VBA入門

公開日:2017年6月2日

FileSystemObjectオブジェクトは、Windowsスクリプトテクノロジの1つであるScriptランタイムに属したオブジェクトです(Excel VBA上ではScriptingのメンバに位置づけされています)。

ここでは、フォルダをコピーする方法としてFileSystemObjectオブジェクトのCopyFolderメソッドを使用する方法を解説します。

FileSystemObject-CopyFolderメソッド(フォルダのコピー)【Excel VBA入門】
目次

1.基本形

FSO.CopyFolder FolderName, Destination[, Overwrite]

変数説明
FSOFileSystemオブジェクト変数。FileSystemオブジェクトとして宣言して格納した変数です。
引数説明
FolderNameコピー元のフォルダ名。フォルダのパスを指定します。ワイルドカードの使用により、複数フォルダの指定が可能。
Destinationコピー先のフォルダ名。フォルダやドライブのパスを指定します。上書きする場合にはフォルダのパスを指定します。
Overwrite省略可能。上書きするかどうかをTrue/Falseで指定します。既定はTrueです。

2.使用例

次の例では、ダウンロードフォルダにあるTestフォルダを、デスクトップ上にコピーします。

Sub フォルダのコピー()

Dim FSO As New FileSystemObject  '(1)
'変数名は自由に設定してください。

FSO.CopyFolder "C:\Users\ユーザー名\Downloads\Test", "C:\Users\ユーザー名\Desktop\"   '(2)
'ユーザー名はあなたのPC環境に合わせて書き換えてください。

End Sub

【解説】

(1)Dim FSO As New FileSystemObject
→FileSystemObjectオブジェクトを使用する際のおまじないです。FileSystemObjectオブジェクト変数FSOの宣言と変数FSOにFileSystemObjectオブジェクトの参照への代入を同時に1行で行っています。

おまじないには事前バインディングと実行時バインディングがありますが、ここでは事前バインディングを使用しています。

なお、FileSystemObjextオブジェクトを使用する場合には前もって、参照設定で「Microsoft Scripting Runtime」を有効にしておきます。

※FileSystemObjectオブジェクトの設定は「Excel VBA入門 | FileSystemObjectオブジェクト(概要)」を参照ください。

(2)FSO.CopyFolder "C:\Users\keisuke_suto\Downloads\Test", "C:\Users\ユーザー名\Desktop\"
→FileSystemObjectオブジェクトのCopyFolderメソッドを使用して、ダウンロードフォルダにあるTestフォルダをデスクトップ上にコピーしています。

引数のうち、3番目の「Overwrite」は今回は指定していません。指定しない場合にはTrueが既定のため、上書きするになります。コピー先であるデスクトップ上にTestフォルダが存在しない場合でも普通に動作します。

【補足1】引数Destinationの設定について

引数Destinationには複数の設定方法があります。

まず、コピー元のフォルダ名をそのまま使うには、引数Destinationには、フォルダコピー先パスを設定し、最後に「\」を付します。

'デスクトップ上にフォルダ名をそのままにしてコピーする場合
FSO.CopyFolder "C:\Users\keisuke_suto\Downloads\Test", "C:\Users\ユーザー名\Desktop\"

次に、コピー元のフォルダ名を変更する場合には、引数Destinationには、コピー先パスだけでなく、変更するフォルダ名を追加して設定します。

'デスクトップ上にコピーするフォルダの名前を「Test」から「MyFolder」に変更してコピーする場合
FSO.CopyFolder "C:\Users\keisuke_suto\Downloads\Test", "C:\Users\ユーザー名\Desktop\MyFolder"

【補足2】引数Overwriteの設定について

コピー先に同じ名前のフォルダが既に存在していて、引数OverwriteをFalseに設定しているとエラーになります(実行時エラー58)。

Excel VBA CopyFolder

また、引数Overwriteは設定を省略することができます。既定はTrueのため、もし、コピー先に同じ名前のフォルダが既に存在している場合には、プログラムを実行すると上書きされることになります。フォルダ内にプログラム実行前に存在していたサブフォルダやファイルはなくなりますので注意が必要です。