この記事では、VBAでファイルをコピーする方法について、サンプルコードを用いて、各機能の使い方を丁寧に説明します。

FileCopyステートメントの基本
基本的な構文
FileCopy
ステートメントの基本的な構文は以下です。
FileCopy コピー元, コピー先
項目 | 説明 |
---|---|
コピー元 | コピーするファイルのフルパス。 |
コピー先 | コピー先のファイルのフルパス。 |
基本的なファイルコピー
基本的なファイルコピーのサンプルコードは下記の通りです。
Sub BasicFileCopy()
' コピー元とコピー先のファイルパスを指定
FileCopy "C:\Source\BasicFile.txt", "C:\Destination\BasicFile.txt"
End Sub
処理の流れ
FileCopy
ステートメントで、コピー元のC:\Source\BasicFile.txt
とコピー先のC:\Destination\BasicFile.txt
を指定します。- コードを実行すると、指定したファイルがコピーされます。
ファイルの複製とリネーム

同じフォルダ内でのファイル複製のサンプルコードは下記の通りです。
Sub DuplicateFileInSameFolder()
Dim i As Long
' 1から5までループ
For i = 1 To 5
FileCopy "C:\Source\Sample.docx", "C:\Source\Sample_" & i & ".docx"
Next i
End Sub
処理の流れ
For
ループで、i
が1から5まで変化するように設定します。FileCopy
ステートメントで、コピー元のファイルとコピー先のファイル名(i
を含む)を指定します。- コードを実行すると、指定したファイルが5回複製されます。
上書きの確認

同名のファイルが存在する場合に上書き確認を出すサンプルコードは下記の通りです。
Sub ConfirmBeforeOverwrite()
Dim ret As Long
' コピー先に同名のファイルが存在するか確認
If Dir("C:\Destination\BasicFile.txt") <> "" Then
ret = MsgBox("同名のファイルが存在します。上書きしますか?", vbYesNo)
If ret = vbNo Then Exit Sub
End If
FileCopy "C:\Source\BasicFile.txt", "C:\Destination\BasicFile.txt"
End Sub
処理の流れ
Dir
関数で、コピー先に同名のファイルが存在するか確認します。- 同名のファイルが存在する場合、
MsgBox
関数で確認メッセージを表示します。 - 「はい」を選択した場合のみ、
FileCopy
ステートメントでファイルをコピーします。
複数のファイルを一括でコピー

複数のファイルを一括でコピーするサンプルコードは下記の通り。
Sub BatchFileCopy()
Dim i As Long
Dim fileNames As Variant
' コピーするファイル名の配列
fileNames = Array("File1.txt", "File2.txt", "File3.txt")
For i = LBound(fileNames) To UBound(fileNames)
FileCopy "C:\Source\" & fileNames(i), "C:\Destination\" & fileNames(i)
Next i
End Sub
処理の流れ
fileNames
配列に、コピーするファイル名を格納します。For
ループで、配列の各要素に対してFileCopy
ステートメントを実行します。- コードを実行すると、指定した複数のファイルが一括でコピーされます。
VBAでファイルをコピーする際のFAQ
Q:FileCopyステートメントでエラーが出る場合、どうすればいいですか?
A:まず、エラーメッセージを確認してください。エラーが「ファイルが見つかりません」というものであれば、コピー元のファイルパスが正確かどうか確認してください。また、コピー先のフォルダが存在するかも確認が必要です。エラーが解消しない場合は、VBAエディタでデバッグを行い、問題の箇所を特定してください。
Q:FileCopyでコピー先に同名のファイルがある場合、どうなりますか?
A:FileCopyステートメントは、コピー先に同名のファイルが存在する場合、そのファイルを上書きします。上書きを避けたい場合は、Dir
関数を用いて事前に確認する必要があります。
Q:FileCopyでフォルダごとコピーは可能ですか?
A:FileCopy
ステートメントはファイルのコピーのみに使用され、フォルダごとコピーする機能はありません。フォルダごとコピーする場合は、FileSystemObject
を使用する方法があります。
Q:FileCopyはネットワークドライブにも対応していますか?
A:はい、FileCopy
ステートメントはネットワークドライブにも対応しています。ただし、ネットワークの接続状態やアクセス権限によっては、エラーが発生する可能性があります。
Q:FileCopyで大量のファイルをコピーする際のパフォーマンスは?
A:FileCopy
ステートメントは一般的に高速ですが、大量のファイルをコピーする場合は時間がかかる可能性があります。そのような場合は、For
ループなどを用いて、進捗状況を表示するようにするとよいでしょう。
Q:FileCopyでコピーが完了したかどうかを確認する方法は?
A:FileCopy
ステートメントは、コピーが成功した場合でも特に通知はありません。コピーが完了したかどうかを確認するには、Dir
関数を用いてコピー先にファイルが存在するか確認する方法があります。
Q:FileCopyで特定の拡張子のファイルだけをコピーすることはできますか?
A:FileCopy
ステートメント自体にはそのような機能はありませんが、Dir
関数と組み合わせることで、特定の拡張子のファイルだけをコピーすることは可能です。
Q:FileCopyでコピー先のファイル名を動的に生成することはできますか?
A:はい、VBAの文字列操作関数を用いて、コピー先のファイル名を動的に生成することができます。例えば、現在の日付や時間をファイル名に含めることが可能です。
関連動画
まとめ
この記事で、VBAを用いてファイルをコピーする基本的な方法から応用テクニックまでを学びました。特に、上書きの際の確認方法や、同じフォルダ内でのファイル複製方法など、日常業務で役立つテクニックを多数紹介しました。この知識を活かして、効率的なファイル操作を行いましょう。
Excelのショートカットキーの練習
当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。
※推奨ブラウザ Google Chrome