「あぁ、またこのフォルダに50個のファイルを移さなきゃ……。一個ずつドラッグして、貼り付けて、名前を確認して。あ、間違えて消しちゃったかも。また最初からやり直しか……。」
そんなため息をついたことはありませんか?
実務の現場では、毎日のように発生するファイルのコピーや移動。一つひとつは数秒の作業でも、積み重なれば一日の貴重な時間を奪っていきます。
そこで今回は、VBAを使ってこれらの作業を一瞬で完了させる「FileSystemObject」のCopyFileとMoveFileの活用法をご紹介します。
ファイル操作の強い味方「FileSystemObject」
VBAでファイルを自由自在に操るには、「FileSystemObject(ファイル・システム・オブジェクト)」という道具を使うのが一番確実です。
- CopyFile:ファイルをコピーして別の場所に複製する(元のファイルは残ります)
- MoveFile:ファイルを別の場所へ移動する(元の場所からは削除されます)
コピペで使える!基本のコード
まずは、一番シンプルなコードを紹介します。
Sub ManageFiles()
' FileSystemObjectを使うための準備をします
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' コピー元とコピー先のパスを指定します
' ※実際のフォルダパスに書き換えてください
Dim sourcePath As String
Dim destPath As String
sourcePath = "C:\Temp\sample.xlsx" ' 元のファイル
destPath = "C:\Backup\sample_bk.xlsx" ' コピー先
' 1. ファイルをコピーする (CopyFile)
' 第3引数をTrueにすると、同名のファイルがあっても上書きします
fso.CopyFile sourcePath, destPath, True
' 2. ファイルを移動する (MoveFile)
' 移動先に同名ファイルがあるとエラーになるので注意です
' fso.MoveFile "C:\Temp\move_me.xlsx", "C:\Archive\"
' 後片付け
Set fso = Nothing
MsgBox "作業が完了しました!"
End Sub
私の失敗談:彼方へ消えたファイル
私も初心者の頃はたくさん失敗をしました。
以前、MoveFileを使ってファイルを移動させようとした時、移動先のパスを「C:\Archive」と書くべきところを、うっかり「C:\Archiv」と一文字間違えてしまったのです。
その結果、どうなったと思いますか?
「Archiv」という名前の「拡張子がない謎のファイル」が出来上がってしまいました。フォルダに移動したかったのに、名前を変えてファイルとして保存されてしまったのです。「ファイルが消えた!」と大慌てしましたが、実際にはただ名前が変わっていただけでした。
このようなミスを防ぐためには、移動先のパスがフォルダであることを示すために、末尾に必ず「\(バックスラッシュ、または円マーク)」を付与することが大切です。
この小さなテクニックだけで、私のような失敗は防げます。
ぜひに取り入れてみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント