エクセルVBAで複数のファイルをコピーする!

エクセルVBAで、複数のファイルをコピーする時、CopyFile メソッドにワイルドカードを使用してコピーします。例えば、毎月、複数のファイルを更新しなければならない作業がある時、ファイルをコピーして今月のファイルを作り、更新しなければいけない!となった場合、複数のファイルをコピーするのは面倒です。ファイルの場所が、奥深い場所にある場合は、ファイルを探すのも大変です。そのような時に、エクセルVBAで複数ファイルをコピーすると、簡単に一括でコピーできます。ですが、指定したフォルダにファイルが存在しない場合、既存ファイルを上書きしないように設定した場合、どちらともエラーになってしまいます。ここでは、エラーを回避する、複数ファイルのコピーも紹介しています。エラーになった時、独自のメッセージを出すことができます。

 

 

CopyFileメソッド

エクセルVBAで、複数のファイルをコピーする場合は、CopyFileメソッドを使います。

CopyFileメソッドは、ワイルドカードを使用して、複数のファイルをコピーします。

ファイル名は、指定したフォルダの中にあるエクセルファイルと同じ名前になります。

 

 

CopyFileメソッドの構文

object.CopyFile ( source, destination[, overwrite] )

object:

必ず指定します。FileSystemObject オブジェクトの名前を指定します。

source:

必ず指定します。コピーするファイルのパスを指定します。複数のファイルを指定するために、ワイルドカードを使用することもできます。

destination:

必ず指定します。ファイルのコピー先のパスを指定します。ワイルドカードは使用できません。

overwrite:

省略できます。既存のファイルを上書きするかどうかを指定します。真 (True) を指定するとファイルは上書きされ、偽 (False) を指定すると上書きされません。既定値は、真 (true) です。

 

 

複数のファイルをコピーする

エクセルVBAで、複数のファイルをコピーしましょう。

「お客様専用」フォルダにあるエクセルファイルを全て、「2018年度契約」フォルダにコピーするコードです。

「2018年度契約」フォルダに、「お客様専用」フォルダと同じ名前のファイルがあった場合は、ファイルを上書きします。

Sub 複数のファイルをコピー()
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
fso.CopyFile “D:\お客様専用\*.xls”, “D:\2018年度契約\”
Set fso = Nothing
End Sub

コピーするときエラーを回避する(複数コピー)

エクセルVBAでファイルをコピーする時、指定したフォルダにファイルが存在しなかった場合、エラーになります。

引数 overwrite に False を指定した時、同じ名前のファイルがあった場合も、エラーになります。

画像

このエラーを回避して、独自のエラーメッセージを出すコードです。

Sub 複数のファイルをコピーA()
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
On Error GoTo ERcp
fso.CopyFile “D:\お客様専用\*.xls”, “D:\2018年度契約\”, False
Set fso = Nothing
ERcp:
MsgBox “フォルダを確認して下さい。”, vbInformation
End Sub

複数ファイルをコピーする時に出るエラーを回避

エクセルVBAで、複数のファイルをコピーする時に、指定したフォルダにファイルが存在しない場合、エラーになります。引数 overwrite に False を指定した時、同じ名前のファイルがあった場合も、エラーになります。フォルダにファイルが存在しない場合は、コピーするファイルをフォルダに入れるか、指定するフォルダを変更しましょう。同じ名前のファイルがあった場合は、そのファイルを移動させるか、必要のない場合は削除、もしくは、ファイル名を変更しましょう。そうすると、ファイルが通常にコピーできるようになります。

こちらの記事もご覧ください。⇒エクセルVBAでファイル名を変更する