【Excel VBA】FSOでファイルをコピー(複製)する方法 (.Copy)

VBAマクロで、処理の実行前に元となるデータファイルのバックアップを作成したり、テンプレートファイルを複製して新しいレポートを作成したりと、ファイルをコピーしたい場面は頻繁にあります。

FileSystemObject (FSO)の**.Copyメソッド**を使えば、ファイルのコピーを簡単かつ確実に行うことができます。この記事では、FSOを使ってファイルをコピーする基本的な方法と、上書きを制御するオプションについて解説します。


目次

【準備】参照設定

FSOを快適に利用するため、VBAエディタでツール > 参照設定を開き、**「Microsoft Scripting Runtime」**にチェックを入れておくことを推奨します。


完成したVBAコード

以下は、「DataSource.xlsx」というファイルを、「Backup」というサブフォルダにコピーするVBAコードです。

'参照設定: Microsoft Scripting Runtime
Sub CopyFileWithFSO()

    ' 変数を宣言します
    Dim fso As New FileSystemObject
    Dim sourceFile As File
    Dim sourceFilePath As String
    Dim destinationFolderPath As String

    '--- 設定 ---
    sourceFilePath = ThisWorkbook.Path & "\DataSource.xlsx"
    destinationFolderPath = ThisWorkbook.Path & "\Backup\"
    '--- 設定ここまで ---

    '--- 1. コピー元ファイルと、コピー先フォルダの存在を確認 ---
    If Not fso.FileExists(sourceFilePath) Then
        MsgBox "コピー元のファイルが見つかりません。" & vbCrLf & sourceFilePath, vbCritical
        Exit Sub
    End If
    If Not fso.FolderExists(destinationFolderPath) Then
        ' フォルダがなければ作成する
        fso.CreateFolder destinationFolderPath
    End If
    
    '--- 2. コピーしたいファイルのオブジェクトを取得 ---
    Set sourceFile = fso.GetFile(sourceFilePath)

    '--- 3. .Copyメソッドでファイルをコピー ---
    ' 第2引数(Overwrite)をTrueにすると、同名ファイルがあっても上書きする
    sourceFile.Copy Destination:=destinationFolderPath, Overwrite:=True

    MsgBox "ファイル「" & sourceFile.Name & "」を" & vbCrLf & _
           "「" & destinationFolderPath & "」にコピーしました。"
           
    ' オブジェクトを解放
    Set sourceFile = Nothing
    Set fso = Nothing

End Sub

コードのポイント解説

Fileオブジェクトの .Copy メソッド

コピーしたいファイルオブジェクト.Copy Destination, [Overwrite]

.Copyメソッドは、fso.GetFileで取得したFileオブジェクトに対して実行します。

  • Destination引数: コピー先のパスを文字列で指定します。この指定方法によって、2つの動作があります。
    1. フォルダを指定した場合: "C:\Backup\"のようにフォルダのパスを指定すると、ファイルは元の名前のままそのフォルダ内にコピーされます。
    2. フルパスを指定した場合: "C:\Backup\NewData.xlsx"のようにフォルダと新しいファイル名を指定すると、コピーと同時に名前の変更が行われます。
  • [Overwrite]引数 (任意): コピー先に同名のファイルが存在した場合の動作をTrueFalseで指定します。
    • True: 確認メッセージなしで、ファイルを上書きします。
    • False (既定値): エラーが発生してマクロが停止します。

自動化処理で、常に最新のバックアップで上書きしたい場合などはTrueを指定するのが便利です。


【応用】タイムスタンプ付きでバックアップを作成する

このテクニックを応用すれば、実行した日時の情報をファイル名に含めた、世代管理ができるバックアップを作成するマクロも簡単に作れます。

Sub CreateTimestampedBackup()
    Dim fso As New FileSystemObject
    Dim bookToBackup As File
    Dim backupFilePath As String
    
    ' このマクロブック自身をバックアップ対象とする
    Set bookToBackup = fso.GetFile(ThisWorkbook.FullName)
    
    ' 元のファイル名に日付と時刻を追加したバックアップファイル名を作成
    backupFilePath = ThisWorkbook.Path & "\" & fso.GetBaseName(bookToBackup) & _
                     "_" & Format(Now, "yyyymmdd_hhnnss") & "." & _
                     fso.GetExtensionName(bookToBackup)

    ' 作成した新しいパスにファイルをコピー
    bookToBackup.Copy backupFilePath

    MsgBox "バックアップを作成しました。" & vbCrLf & backupFilePath
End Sub

まとめ

FSOでファイルをコピーするには、Fileオブジェクトの.Copyメソッドを使います。

  1. **fso.GetFile("コピー元のパス")**で、Fileオブジェクトを取得する。
  2. そのオブジェクトに対し、.Copy "コピー先のパス", [Overwrite] を実行する。
  3. (推奨)実行前に、**FileExistsFolderExists**でエラー条件をチェックする。

.Copyメソッドは、バックアップの作成やテンプレートファイルの複製など、ファイル操作の自動化において基本となる重要な機能です。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次