VBAでファイルをコピーする方法として、FileSystemObjectのCopyFileを使用することで実現できます。
FileSystemObjectは、ファイルシステムオブジェクトを操作するための標準ライブラリであり、ファイルやフォルダの作成や削除、コピー、移動などを簡単に行うことができます。
CopyFileメソッドは、コピー元のファイルパスとコピー先のファイルパスを指定して利用します。
ここでは、FileSystemObjectのCopyFileを使ってVBAでファイルをコピーする方法について説明します。
もくじ
【サンプルソース】ファイルのコピー(コピー元ファイルと同じフォルダにコピー)
以下は、FileSystemObjectのCopyFileを使用してVBAでファイルをコピーするサンプルソースです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub copyFile() Dim motoFile As String Dim sakiFile As String Dim fso As Object ' コピー元ファイルを指定 motoFile = "D:\200_work\100_sample\AAA\A001.txt" ' コピー先ファイルを指定 sakiFile = "D:\200_work\100_sample\AAA\A001_COPY.txt" ' FileSystemObjectを生成 Set fso = CreateObject("Scripting.FileSystemObject") ' ファイルをコピー fso.copyFile motoFile, sakiFile, True ' メモリ解放 Set fso = Nothing MsgBox "ファイルをコピーしました。" End Sub |
上記のサンプルソースでは、以下の流れで処理しています。
- コピー元ファイルを指定する
- コピー先ファイルを指定する
- FileSystemObjectを作成する
- ファイルをコピーする
CopyFileメソッドの引数は以下を指定します。
- コピー元ファイルパス
- コピー先ファイルパス
- コピー先ファイルを上書きしてよいか(True:許可、False:許可しない)
注意点としては、指定したコピー元ファイルが存在しない場合、エラーが発生します。
コピー先ファイルを上書きしてよいかで「False:許可しない」を指定したときに
すでにコピー先ファイルが存在しているとエラーが発生します。
【サンプルソース】ファイルのコピー(別フォルダに同名でコピー)
以下は、FileSystemObjectのCopyFileを使用してVBAでコピー元ファイル名と同じファイル名で別フォルダにコピーするサンプルソースです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub copyFileSameName() Dim motoFile As String Dim sakiFile As String Dim fso As Object ' コピー元ファイルを指定 motoFile = "D:\200_work\100_sample\AAA\A001.txt" ' コピー先フォルダを指定 sakiFile = "D:\200_work\100_sample\AAA\BBB\" ' FileSystemObjectを生成 Set fso = CreateObject("Scripting.FileSystemObject") ' ファイルをコピー fso.copyFile motoFile, sakiFile, True ' メモリ解放 Set fso = Nothing MsgBox "ファイルをコピーしました。" End Sub |
上記のサンプルソースでは、以下の流れで処理しています。
- コピー元ファイルを指定する
- コピー先フォルダを指定する(※パスの末尾を\にすること)
- FileSystemObjectを作成する
- ファイルをコピーする
CopyFileメソッドの引数は以下を指定します。
- コピー元ファイルパス
- コピー先フォルダパス
- コピー先ファイルを上書きしてよいか(True:許可、False:許可しない)
注意点としては、指定したコピー元ファイルが存在しない場合、エラーが発生します。
コピー先フォルダパスの末尾は\を指定することでフォルダパスと認識されます。
末尾に\をつけないと、そういうファイル名にして欲しいと認識されます。
【サンプルソース】ファイルのコピー(指定フォルダ内の全ファイルをコピー)
以下は、FileSystemObjectのCopyFileを使用してVBAでコピー元フォルダ内の全ファイルをコピー先フォルダにコピーするサンプルソースです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub copyFileAll() Dim motoFile As String Dim sakiFile As String Dim fso As Object ' コピー元フォルダを指定 motoFile = "D:\200_work\100_sample\AAA\*" ' コピー先フォルダを指定 sakiFile = "D:\200_work\100_sample\BBB\" ' FileSystemObjectを生成 Set fso = CreateObject("Scripting.FileSystemObject") ' ファイルをコピー fso.copyFile motoFile, sakiFile, True ' メモリ解放 Set fso = Nothing MsgBox "ファイルをコピーしました。" End Sub |
上記のサンプルソースでは、以下の流れで処理しています。
- コピー元フォルダの全ファイルを指定する(※末尾を*とする)
- コピー先フォルダを指定する(※パスの末尾を\にすること)
- FileSystemObjectを作成する
- ファイルをコピーする
CopyFileメソッドの引数は以下を指定します。
- コピー元ファイルパス
- コピー先フォルダパス
- コピー先ファイルを上書きしてよいか(True:許可、False:許可しない)
注意点としては、コピー元フォルダパスの末尾を*としているため、
コピー元フォルダに存在する全てのファイルを指定していることになります。
フォルダに存在する「全てのテキストファイル」を指定したい場合は、以下のように指定します。
“D:\200_work\100_sample\AAA\*.txt”
EXCELファイルを指定したい場合は、以下のように指定します。
“D:\200_work\100_sample\AAA\*.xlsx”
まとめ
VBAでファイルをコピーする方法として、FileSystemObjectのCopyFileを使用する方法を紹介しました。
ファイルのコピー方法としては、以下の3種類の方法を説明しました。
- コピー元フォルダに別名でファイルコピーする方法
- 別フォルダにコピー元ファイルと同名でコピーする方法
- フォルダに存在する全ファイルを別フォルダにコピーする方法
状況に応じて、使い分けましょう。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。