【VBA】ファイルコピーの方法|FileCopyとFileSystemObjectの使い方を解説

VBAでは、ファイルを別の場所へ自動でコピーする処理を簡単に作成できます。 例えば次のような場面でよく使われます。

  • バックアップファイルの作成
  • テンプレートファイルの複製
  • 処理前データの退避
  • 定期的なファイル保存

VBAでファイルコピーを行う方法は主に次の2つです。

方法特徴
FileCopyVBA標準。シンプルで高速
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 の違い

項目FileCopyFileSystemObject
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

コメント

タイトルとURLをコピーしました