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.txt
がbackup
フォルダにコピーされます。すでに同じ名前のファイルがある場合は上書きされますので注意が必要です。
FileSystemObjectを使ったファイルコピー
より柔軟なファイル操作を行いたい場合は、FileSystemObject
(略してFSO)を使うと便利です。これはMicrosoftが提供するファイルシステム操作用のオブジェクトです。
参照設定が必要
使う前に「Microsoft Scripting Runtime」への参照設定を追加する必要があります。
- ExcelのVBE(Visual Basic Editor)を開く
- メニューバーから「ツール」→「参照設定」
- 「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のボタンに割り当てると便利です。
- Excelのリボンから「開発」タブを開く
- 「挿入」→「フォームコントロール」→「ボタン」を選ぶ
- ボタンをワークシートに配置して、作成したマクロを割り当てる
この手順で、ワンクリックでファイルをコピーできるようになります。
まとめ
VBAを使えば、ファイルコピーの処理も簡単に自動化できます。業務で頻繁に使うファイル操作をマクロにしておけば、作業ミスの防止や時短にもつながります。
今回紹介した内容をおさらいします。
FileCopy
で簡単コピーが可能FileSystemObject
で柔軟なファイル制御ができる- 上書き防止やエラー処理で安全に実行できる
- ボタン登録で誰でも使いやすくなる
ぜひこの記事を参考に、あなたの業務にもVBAを活用してみてください。次回は、フォルダごとコピーする方法や、複数ファイルを一括でコピーする方法なども紹介していきます!