VBAでは、ファイルを別の場所へ自動でコピーする処理を簡単に作成できます。 例えば次のような場面でよく使われます。
- バックアップファイルの作成
- テンプレートファイルの複製
- 処理前データの退避
- 定期的なファイル保存
VBAでファイルコピーを行う方法は主に次の2つです。
| 方法 | 特徴 |
|---|---|
| FileCopy | VBA標準。シンプルで高速 |
| FileSystemObject (FSO) | 上書き制御・複数コピーなど高機能 |
それぞれの使い方をわかりやすく解説します。
目次
1. FileCopyでファイルをコピーする(最もシンプル)
最も簡単にファイルをコピーできるのが FileCopy ステートメントです。
基本構文
FileCopy コピー元パス, コピー先パス
使用例
Sub CopyFile()
FileCopy "C:\Sample\test.txt", "C:\Backup\test.txt"
End Sub
実行すると C:\Sample\test.txt → C:\Backup\test.txt にコピーされます。
変数を使う実務向け例
Sub CopyFile()
Dim sourcePath As String
Dim destPath As String
sourcePath = "C:\Sample\test.txt"
destPath = "C:\Backup\test.txt"
FileCopy sourcePath, destPath
End Sub
FileCopy 使用時の注意点
① コピー元ファイルが存在しないとエラー
実行時エラー '53':ファイルが見つかりません
② コピー先フォルダが存在しないとエラー
→ 事前にフォルダ作成 or 存在確認が必要
③ 上書き確認はできない(自動上書き)
→ 同名ファイルがあると自動で上書きされる
2. FileSystemObjectでファイルコピー(高機能)
FileSystemObject(FSO) を使うと、上書き制御や複数コピーなど柔軟な処理が可能です。
基本構文
CopyFile コピー元, コピー先, 上書き可否
使用例
Sub CopyFile()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "C:\Sample\test.txt", "C:\Backup\test.txt", True
End Sub
引数の意味
| 引数 | 内容 |
|---|---|
| 第1引数 | コピー元 |
| 第2引数 | コピー先 |
| 第3引数 | 上書き可否(True / False) |
上書きを禁止する例
fso.CopyFile "C:\Sample\test.txt", "C:\Backup\test.txt", False
→ 同名ファイルがあるとエラーになります。
FileSystemObjectのメリット
- 上書き制御ができる
- ワイルドカードが使える
- フォルダ単位コピーも可能
ワイルドカードで複数コピー
fso.CopyFile "C:\Sample\*.txt", "C:\Backup\", True
→ Sampleフォルダ内の .txt をすべてコピー (FileCopy では不可)
3. FileCopy と FileSystemObject の違い
| 項目 | FileCopy | FileSystemObject |
|---|---|---|
| VBA標準 | ○ | ○ |
| 記述量 | 少ない | やや多い |
| 上書き制御 | × | ○ |
| 複数コピー | × | ○ |
| ワイルドカード | × | ○ |
| 実務利用 | シンプル処理 | 高機能処理 |
4. 実務でよく使うパターン
バックアップファイル作成(FileCopy)
Sub BackupFile()
Dim sourcePath As String
Dim destPath As String
sourcePath = "C:\Data\report.xlsx"
destPath = "C:\Backup\report_" & Format(Now, "yyyymmdd_HHMMSS") & ".xlsx"
FileCopy sourcePath, destPath
End Sub
FileCopy を安全に使う例(存在確認付き)
Sub SafeCopyFile()
Dim sourcePath As String
Dim destPath As String
sourcePath = "C:\Sample\test.txt"
destPath = "C:\Backup\test.txt"
'コピー元確認
If Dir(sourcePath) = "" Then
MsgBox "コピー元ファイルが存在しません"
Exit Sub
End If
FileCopy sourcePath, destPath
End Sub
FSOで安全にコピーする実務向け例(おすすめ)
Sub SafeCopyFSO()
Dim fso As Object
Dim sourcePath As String
Dim destPath As String
sourcePath = "C:\Sample\test.txt"
destPath = "C:\Backup\test.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
'コピー元確認
If Not fso.FileExists(sourcePath) Then
MsgBox "コピー元ファイルが存在しません"
Exit Sub
End If
'コピー実行(上書き禁止)
fso.CopyFile sourcePath, destPath, False
End Sub
5. まとめ
VBAでファイルコピーする方法は次の2つです。
| 方法 | 用途 |
|---|---|
| FileCopy | シンプルなコピー |
| FileSystemObject | 高機能コピー |
使い分けは以下の通り。
- 単純コピー → FileCopy
- 複数コピー・上書き制御 → FileSystemObject
コメント