VBA ファイル/ワークブックをコピーする
このチュートリアルでは、VBAを使用してファイルをコピーする方法を説明します。
VBAでは、ファイルをコピーするために FileSystemObjectが利用できます。
ファイルの名前を変更する方法を学びたい場合は、こちらのリンクをご覧ください → VBA ファイル名の変更
ファイル/ワークブックをコピーする
ここでは、「VBA Folder」フォルダにある既存のファイル「Sample file 1.xlsx」をコピーする方法を説明します。この例では、ファイル名を変更せず、コピーして上書きします。現在、このフォルダにはこの1つのファイルしかありません。
画像1フォルダ C:\VBA Folder 内のファイル
以下はそのコードです。
Dim oFSO As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
Call oFSO.CopyFile("C:\VBA Folder\Sample file 1.xlsx", "C:\VBA Folder\", True)
まず、Scripting.FileSystemObjectクラスのオブジェクトを作成します。
Set oFSO = CreateObject("Scripting.FileSystemObject")
次に、CopyFileメソッドを使用します。
Call oFSO.CopyFile("C:\VBA Folder\Sample file 1.xlsx", "C:\VBA Folder\", True)
このメソッドの第1パラメーターはコピー元のパス、第2パラメーターはコピー先のパスです。3番目のパラメーターはOverwriteです。コピー元とコピー先のパスが同じなので、OverwriteをTrueまたはFalseに設定する必要があります。この例では、元のファイルを上書きすることを意味するTrueを入れています。 では、保存先が同じで、OverwriteをFalseに設定した場合はどうなるのか見てみましょう。コードのこの行を変更するだけです。
Call oFSO.CopyFile("C:\VBA FolderSample file 1.xlsx", "C:\VBA Folder\", False)
その結果、画像2のようなエラーが発生します。
画像2.ファイルコピー時のエラー
ファイルをコピーして名前を変更する
ファイルをコピーする際のもう一つの方法は、ファイル名を変更することです。これはファイルのコピーと似ていますが、コピー先のパスを別の名前に設定する必要があります。以下はそのコードです。
Dim oFSO As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
Call oFSO.CopyFile("C:\VBA Folder\Sample file 1.xlsx", "C:\VBA Folder\Sample file Copy.xlsx")
コードの最後の行からわかるように、ファイルSample file 1.xlsxを同じフォルダにコピーして、Sample file Copy.xlsxという名前にしたいと思います。
Call oFSO.CopyFile("C:\VBA Folder\Sample file 1.xlsx", "C:\VBA Folder\Sample file Copy.xlsx")
これで、VBA Folderにファイルが2つできました。コードの実行結果は画像3のようになります。
画像3.ファイルをコピーして名前を変更