サイトについて      連絡先   検索

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 = Nothing

fso.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 = Nothing

fso.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 = Nothing

fso.CopyFile関数の第 1 (source) 引数にワイルドカードを指定して、一致する複数のファイルをまとめてコピーできます。1 つもファイルが一致しないときはエラーが発生します。

使用できるワイルドカードには次のものがあります。

D:\Tips*.txtを指定すると次のファイルが一致します。


D:\Tips.txt
D:\Tips1.txt
D:\Tips12.txt
D:\Tips123.txt

D:\Tips?.txtを指定すると次のファイルが一致します。


D:\Tips.txt
D:\Tips1.txt
D:\Tips2.txt

D:\TipsFolder\*を指定すると、TipsFolder フォルダ内のすべてのファイルと一致します。

第 2 (destination) 引数には必ずパスの最後を \ 記号にしてフォルダを指定します。フォルダが存在しないときはエラーが発生します。

ワイルドカードに一致したすべてのファイルが指定したフォルダにコピーされます。

コピー中に既にファイルが存在してたり、読み取り専用のファイルに上書きしようとしてエラーが発生したときは、そこで処理が中断されます。それ以降のファイルはコピーされません。

関連ページ