こんにちは、Ryoです。
ファイルをコピーする手段としては主にFileCopyステートメント、SaveCopyAsメソッドがありますが、コピー元ファイルの扱いに違いがありますので、その辺りを含めて書いていきたいと思います。
1.サンプル概要
◆FileCopyステートメントでの処理
指定ファイルを別名で保存することで複製しますが、この処理の際に指定ファイルが開かれているとエラーになりますので、閉じているファイルを対象にした処理になります。
実行ファイルが保存されている「Copy_Sample」フォルダ内の「DataCopy」フォルダにある「Sample_File1.xlsx」に対して処理を行います。
コピーするファイルは「コピー_Sample_File1.xlsx」と名前を指定し保存しています。
◆SaveCopyAsメソッドでの処理
FileCopyステートメント同様に指定ファイルを別名で保存することで複製しますが、SaveCopyAsメソッドにおけるコピー元の扱いとしては「開いているファイル(ブック)」が対象になります。
実行元ファイル「SaveCopy_Sample.xlsm」に対して処理を行います。
実行元ファイルの.xlsmに対し、「コピー_SaveCopy_Sample.xlsx」として保存するものです。
以上がサンプル概要になります。
2.サンプルコード
◆FileCopyステートメント
Sub Sample1() '本実行ファイルが保存されたフォルダ「Copy_Sample」内の '「DataCopy」フォルダ内にある「Sample_File1.xlsx」に対しての処理 '「Sample_File1.xlsx」→「コピー_Sample_File1.xlsx」の名前でコピー FileCopy ThisWorkbook.Path & "\DataCopy\Sample_File1.xlsx", _ ThisWorkbook.Path & "\DataCopy\コピー_Sample_File1.xlsx" '※注記 ' コピー後のファイル名と同一のファイルが既に存在する場合、 ' 無条件で上書き(アラートや確認メッセージなし)される点に注意が必要 End Sub
構文:FileCopy source,destination
FileCopyステートメントはファイルをコピーするステートメントで、指定したファイルを別名で保存します。処理を行う上で対象のファイルは閉じている必要がありますので、開いている場合はエラーとなる点に注意が必要です。
サンプルコードを実行すると指定したフォルダ内に指定名でコピーが保存されますが、コメントに記載した通り「同名ファイルがある場合は無条件で上書き保存」となりますのでご注意ください。
また、FileCopyステートメントはExcelファイルに限らずコピーすることができます。
◆SaveCopyAsメソッド
Sub Sample2() '本実行ファイルが保存されたフォルダ「Copy_Sample\SaveCopy」内で '同ファイルのコピーを保存する '「SaveCopy_Sample.xlsm」→「コピー_SaveCopy_Sample.xlsx」の名前でコピー ThisWorkbook.SaveCopyAs _ ThisWorkbook.Path & "\コピー_SaveCopy_Sample.xlsx" '※注記 ' コピー後のファイル名と同一のファイルが既に存在する場合、 ' 無条件で上書き(アラートや確認メッセージなし)される点に注意が必要 End Sub
構文:オブジェクト.SaveCopyAs(Filename)
SaveCopyAsメソッドはブックのコピーを作成するメソッドで、指定ファイルを別名で保存するものですが、このメソッドではファイルが開いていることが条件になります。
こちらも同様で「同名ファイルがあれば無条件で上書き」される点に注意が必要です。
3.まとめ
ブックのコピーは何かと扱うことが多いので、FileCopyステートメント/SaveCopyAsメソッドは知っておくと便利です。
特にFileCopyステートメントはとても扱いやすいので私もよく使っていますが同名ファイルを無条件で上書きしてしまうという失敗経験も多いので、この点のみ注意して使用されると良いと思います。
以上、ファイル(ブック)のコピーを保存する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo