初心者向けVBA講座:ファイルをコピーするマクロの書き方と実行方法を徹底解説!

Excel VBAを使えば、複雑な作業をボタン一つで自動化できます。なかでも「ファイルをコピーする処理」は、日々の業務で頻繁に使われる便利なマクロのひとつです。
たとえば、毎日のバックアップ処理や、複数のテンプレートファイルの複製、指定フォルダへのファイル移動など、ファイル操作が必要な場面は少なくありません。

本記事では、VBAを使って簡単にファイルをコピーする方法を、初心者の方にもわかりやすく解説していきます。コピーマクロの基本から、上書き防止やエラーハンドリングの方法まで、実践的なサンプルコードとあわせて紹介します。


VBAでファイルをコピーする基本構文

まずは、VBAでファイルをコピーするための基本的な構文を確認しましょう。VBAでは、FileSystemObjectを利用する方法と、FileCopyステートメントを使う方法の2種類があります。

FileCopyステートメントの使い方

もっとも簡単な方法は、VBAに用意されているFileCopyステートメントを使うことです。

Sub CopyFileSimple()
Dim sourcePath As String
Dim destinationPath As String

sourcePath = "C:\Users\User\Documents\source.txt"
destinationPath = "C:\Users\User\Documents\backup\source.txt"

FileCopy sourcePath, destinationPath
End Sub

このマクロを実行すると、source.txtbackupフォルダにコピーされます。すでに同じ名前のファイルがある場合は上書きされますので注意が必要です。


FileSystemObjectを使ったファイルコピー

より柔軟なファイル操作を行いたい場合は、FileSystemObject(略してFSO)を使うと便利です。これはMicrosoftが提供するファイルシステム操作用のオブジェクトです。

参照設定が必要

使う前に「Microsoft Scripting Runtime」への参照設定を追加する必要があります。

  1. ExcelのVBE(Visual Basic Editor)を開く
  2. メニューバーから「ツール」→「参照設定」
  3. 「Microsoft Scripting Runtime」にチェックを入れて「OK」

コード例:FSOでファイルをコピーする

Sub CopyFileWithFSO()
Dim fso As FileSystemObject
Dim sourceFile As String
Dim targetFile As String

sourceFile = "C:\Users\User\Documents\source.txt"
targetFile = "C:\Users\User\Documents\backup\source.txt"

Set fso = New FileSystemObject

If fso.FileExists(sourceFile) Then
fso.CopyFile sourceFile, targetFile, True 'Trueで上書き可
MsgBox "コピー完了"
Else
MsgBox "コピー元のファイルが見つかりません"
End If
End Sub

このコードでは、コピー元ファイルの存在チェックや、上書きの可否も制御できます。


上書き防止のための処理

業務では、うっかりファイルを上書きしてしまうことは避けたいものです。以下のように処理することで、既存ファイルがある場合はコピーしないようにできます。

If Not fso.FileExists(targetFile) Then
fso.CopyFile sourceFile, targetFile
Else
MsgBox "コピー先にすでにファイルが存在しています"
End If

このようにしておくことで、重要なファイルの誤上書きを防ぐことができます。


日付をつけてバックアップする方法

バックアップを自動化する場合には、コピー先のファイル名に日付を付けると便利です。

Sub BackupWithDate()
Dim fso As FileSystemObject
Dim sourceFile As String
Dim backupFile As String
Dim today As String

Set fso = New FileSystemObject

sourceFile = "C:\Users\User\Documents\data.xlsx"
today = Format(Now, "yyyymmdd")
backupFile = "C:\Users\User\Documents\backup\data_" & today & ".xlsx"

If fso.FileExists(sourceFile) Then
fso.CopyFile sourceFile, backupFile
MsgBox "バックアップ完了"
Else
MsgBox "コピー元ファイルが見つかりません"
End If
End Sub

このコードを使えば、実行するたびに「data_20250416.xlsx」のように日付入りのファイルが生成されていきます。


エラー処理を加えるとさらに安心

ファイルが存在しない、パスが間違っているなど、VBAではエラーが起きることもあります。そこで、エラー処理を組み込んでおくと、より安心して使えるマクロになります。

Sub CopyWithErrorHandler()
On Error GoTo ErrorHandler

Dim sourcePath As String
Dim destPath As String

sourcePath = "C:\source\file.txt"
destPath = "C:\dest\file.txt"

FileCopy sourcePath, destPath
MsgBox "コピー成功"

Exit Sub

ErrorHandler:
MsgBox "エラーが発生しました:" & Err.Description
End Sub

マクロをボタンに登録して実用的に使おう

作成したマクロを実際に使うには、Excelのボタンに割り当てると便利です。

  1. Excelのリボンから「開発」タブを開く
  2. 「挿入」→「フォームコントロール」→「ボタン」を選ぶ
  3. ボタンをワークシートに配置して、作成したマクロを割り当てる

この手順で、ワンクリックでファイルをコピーできるようになります。


まとめ

VBAを使えば、ファイルコピーの処理も簡単に自動化できます。業務で頻繁に使うファイル操作をマクロにしておけば、作業ミスの防止や時短にもつながります。

今回紹介した内容をおさらいします。

  • FileCopyで簡単コピーが可能
  • FileSystemObjectで柔軟なファイル制御ができる
  • 上書き防止やエラー処理で安全に実行できる
  • ボタン登録で誰でも使いやすくなる

ぜひこの記事を参考に、あなたの業務にもVBAを活用してみてください。次回は、フォルダごとコピーする方法や、複数ファイルを一括でコピーする方法なども紹介していきます!

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