Excel VBAを使えば、複雑な作業をボタン一つで自動化できます。なかでも「ファイルをコピーする処理」は、日々の業務で頻繁に使われる便利なマクロのひとつです。
たとえば、毎日のバックアップ処理や、複数のテンプレートファイルの複製、指定フォルダへのファイル移動など、ファイル操作が必要な場面は少なくありません。
本記事では、VBAを使って簡単にファイルをコピーする方法を、初心者の方にもわかりやすく解説していきます。コピーマクロの基本から、上書き防止やエラーハンドリングの方法まで、実践的なサンプルコードとあわせて紹介します。
まずは、VBAでファイルをコピーするための基本的な構文を確認しましょう。VBAでは、FileSystemObject
を利用する方法と、FileCopy
ステートメントを使う方法の2種類があります。
もっとも簡単な方法は、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
(略してFSO)を使うと便利です。これはMicrosoftが提供するファイルシステム操作用のオブジェクトです。
使う前に「Microsoft Scripting Runtime」への参照設定を追加する必要があります。
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のボタンに割り当てると便利です。
この手順で、ワンクリックでファイルをコピーできるようになります。
VBAを使えば、ファイルコピーの処理も簡単に自動化できます。業務で頻繁に使うファイル操作をマクロにしておけば、作業ミスの防止や時短にもつながります。
今回紹介した内容をおさらいします。
FileCopy
で簡単コピーが可能FileSystemObject
で柔軟なファイル制御ができるぜひこの記事を参考に、あなたの業務にもVBAを活用してみてください。次回は、フォルダごとコピーする方法や、複数ファイルを一括でコピーする方法なども紹介していきます!