Excel VBA入門 | FileSystemObject-CopyFileメソッド(ファイルのコピー)

Excel VBA入門

公開日:2017年5月26日

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

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

FileSystemObject-CopyFileメソッド(ファイルの取得)【Excel VBA入門】
目次

1.基本形

FSO.CopyFile FileName, Destination[, Overwrite]

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

2.使用例

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

Sub ファイルのコピー()

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

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

End Sub

【解説】

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

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

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

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

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

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

コピー先は、今回はファイルではなくフォルダ(デスクトップ)を指定しています。フォルダやドライブ指定の場合には最後に「\」を付します。付さないと実行時エラーとなります(実行時エラー70)。

Excel VBA CopyFile

また、コピー元にファイルが存在しない場合にもエラーとなります(実行時エラー53)。

Excel VBA CopyFile

3.【混同注意】FileCopyステートメントを使用したプログラミングとの比較

ファイルをコピーするだけであれば、FileCopyステートメントを使用すれば事足ります。FileSystemObjectオブジェクトを使用するまでもありません。

しかし、ファイルのコピー以外にもファイル操作(移動、削除、編集)やドライブ、フォルダ操作も行うプログラムを書く場合には、これら一連の操作が可能であるFileSystemObjectオブジェクトを採用した方がプログラミングしやすくなります。この場合には、ファイルのコピーはCopyFileメソッドを使用した方がコードが見やすくなります。

※FileCopyステートメントは今回テーマのFileSystemObjectオブジェクトのCopyFileメソッドとは別物です。FileSystemObjectオブジェクトとは関係なく単独で使用できます。混同しやすいのでご注意ください。