更新日:、 作成日:
VBA ファイルのコピー
はじめに
Excel VBA マクロでファイルをコピーする方法を紹介します。
CopyFile 関数を使って指定したファイルを別の名前や、他のフォルダにコピーまたは上書きできます。
ワイルドカードを使って複数のファイルや全てのファイルをまとめてコピーできます。
FileSystemObject について
ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。
コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。
ファイルのコピー
指定したファイルのコピー
Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化
Call fso.CopyFile("D:\Tips.txt", "D:\TipsCopy.txt", True) ' ファイル名を指定してコピー
Call fso.CopyFile("D:\Tips.txt", "D:\TipsFolder\", True)  ' 同じファイル名でコピー (D:\TipsFolder\Tips.txt)
' 後始末
Set fso = Nothingfso.CopyFile 関数で指定したパスのファイルをコピーします。
第 1 (source) 引数にコピーするファイルのパスを指定します。ファイルが存在しないときはエラーが発生します。パスにはワイルドカードを指定できますが、詳しくは下記の「複数のファイルのコピー」をご覧ください。
第 2 (destination) 引数にコピー先のパスを指定します。ファイル名を含めるとそのファイル名でコピーします。パスの最後を \ 記号にすると、そのフォルダの中に同じファイル名でコピーします。フォルダが存在しないときはエラーが発生します。
第 3 (overwrite) 引数に True を指定すると上書きしてコピーします。False または省略すると既にファイルが存在しているときはエラーが発生します。
読み取り専用のファイルに上書きすると必ずエラーが発生します。
フォルダ内のファイルをコピー
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim fl As Folder
Set fl = fso.GetFolder("D:\") ' フォルダを取得
Dim f As File
For Each f In fl.Files ' フォルダ内のファイルを取得
    If f.Name = "Tips.txt" Then              ' コピーしたいファイル
        Call f.Copy("D:\TipsCopy.txt", True) ' ファイル名を指定してコピー
        Call f.Copy("D:\TipsFolder\", True)  ' 同じファイル名でコピー (D:\TipsFolder\Tips.txt)
    End If
Next
' 後始末
Set fso = Nothingfso.GetFolder 関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。
fl.Files プロパティから、そのフォルダの File オブジェクトの一覧を取得できます。
f.Name プロパティから、そのファイルの拡張子付きの名前を取得できます。これでコピーしたいファイルか判定します。
f.Copy 関数でそのファイルをコピーします。使い方は上記で説明した fso.CopyFile 関数と同じです。CopyFile の第 1 (source) 引数に、そのファイルのパスが渡されます。
複数のファイルをコピー
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Call fso.CopyFile("D:\Tips*.txt", "D:\TipsFolder\", True) ' 複数のファイルをまとめてコピー
Call fso.CopyFile("D:\*", "D:\TipsFolder\", True)         ' 全てのファイルをまとめてコピー
' 後始末
Set fso = Nothingfso.CopyFile 関数の第 1 (source) 引数にワイルドカードを指定して、一致する複数のファイルをまとめてコピーできます。1 つもファイルが一致しないときはエラーが発生します。
使用できるワイルドカードには次のものがあります。
| パターン | 説明 | 使用例 | 一致例 | 
| * | 任意の長さの文字 (0 文字以上) | あ* | あ, あい, あいう | 
| ? | 任意の1文字 または 0 文字 | あ? | あい, あか, あき | 
D:\Tips*.txt を指定すると次のファイルが一致します。
D:\Tips.txt
D:\Tips1.txt
D:\Tips12.txt
D:\Tips123.txtD:\Tips?.txt を指定すると次のファイルが一致します。
D:\Tips.txt
D:\Tips1.txt
D:\Tips2.txtD:\TipsFolder\* を指定すると、TipsFolder フォルダ内のすべてのファイルと一致します。
第 2 (destination) 引数には必ずパスの最後を \ 記号にしてフォルダを指定します。フォルダが存在しないときはエラーが発生します。
ワイルドカードに一致したすべてのファイルが指定したフォルダにコピーされます。
コピー中に既にファイルが存在してたり、読み取り専用のファイルに上書きしようとしてエラーが発生したときは、そこで処理が中断されます。それ以降のファイルはコピーされません。
スポンサーリンク
