【VBAリファレンス|実務向け】【実務で差がつく】FileCopyステートメントの「落とし穴」と正しい安全対策

スポンサーリンク

皆さん、こんにちは。VBA講師の佐藤です。実務で「定型的なバックアップ作成」や「フォルダ間のファイル移動」を自動化したいとき、最も手軽で強力なのがFileCopyステートメントです。しかし、この命令、実は「何も考えずに使うと痛い目を見る」という特徴があります。今回は、中級者へステップアップするための実務的な活用術を解説します。

FileCopyステートメントの基本構文

FileCopyは、コピー元とコピー先のパスを記述するだけのシンプルな命令です。

FileCopy “C:\Work\Report.xlsx”, “D:\Backup\Report_20231027.xlsx”

これだけでファイルは複製されます。しかし、実務では「ファイルがすでに存在していたらどうするか」「コピー先にフォルダが存在しなかったらどうするか」といった例外処理が不可欠です。

落とし穴1:上書き確認なしで強制実行される

FileCopyの最大の注意点は、コピー先に同名のファイルがあっても警告なしで上書きしてしまうことです。大切な前日のデータを一瞬で消し飛ばさないために、必ず「存在確認」を行いましょう。

落とし穴2:フォルダが存在しないとエラーになる

VBAは、存在しないパスに対しては冷徹です。コピー先のフォルダが未作成の場合、実行時エラー76(パスが見つかりません)が発生します。これを防ぐには、Dir関数でフォルダの有無をチェックし、必要に応じてMkDir関数でフォルダを作成する工夫が必要です。

実務現場で使える安全なコード例

以下は、私が現場でよく使う「エラーを回避する安全なコピー」の雛形です。

Sub SafeFileCopy() Dim srcPath As String Dim dstPath As String srcPath = “C:\Work\Data.xlsx” dstPath = “D:\Backup\Data.xlsx” ‘ 1. コピー元が存在するか確認 If Dir(srcPath) = “” Then MsgBox “コピー元ファイルが見つかりません。” Exit Sub End If ‘ 2. 上書き確認(必要に応じて) If Dir(dstPath) “” Then If MsgBox(“既にファイルが存在します。上書きしますか?”, vbYesNo) = vbNo Then Exit Sub End If ‘ 3. ファイルコピー実行 FileCopy srcPath, dstPath MsgBox “コピーが完了しました。” End Sub

講師からのアドバイス:FileSystemObjectとの使い分け

今回はFileCopyを紹介しましたが、もっと複雑な処理(ファイルの移動、属性の変更、削除など)が必要な場合は、FileSystemObject (FSO) というライブラリを使うのが現代のVBA開発の主流です。しかし、単に「同じ場所にコピーして名前を変える」といった軽微な処理であれば、今回紹介したFileCopyの方が記述量が少なく高速です。

目的に合わせて「シンプルで速いFileCopy」と「高機能なFSO」を使い分けることこそ、ベテランへの第一歩です。ぜひ、日々の業務効率化に役立ててくださいね。

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