ファイルコピーの使い方とは?
Excel VBAにおいて、ファイルをコピーすることはよくあります。
FileCopyステートメントを使用することで、簡単にファイルのコピーができます。
しかし、このステートメントの使い方を正しく理解している人は意外と少ないかもしれません。
FileCopyステートメントとは?
まずはじめに、FileCopyステートメントについて説明します。
このステートメントは、ファイルをコピーするために使用されるVBAの関数です。
FileCopyステートメントを使用することで、指定されたファイルを別のフォルダにコピーすることができます。このステートメントは、下記のような構文を持っています。
1 |
FileCopy source, destination |
source:コピー元のファイルパスを指定します。
destination:コピー先のファイルパスを指定します。
FileCopyステートメントの例
次に、FileCopyステートメントの例を示します。
例として、Cドライブのtestフォルダにあるsample.txtファイルを、Dドライブのbackupフォルダにコピーする場合を考えます。
1 |
FileCopy "C:\test\sample.txt", "D:\backup\sample.txt" |
上記の例では、Cドライブのtestフォルダにあるsample.txtファイルが、Dドライブのbackupフォルダにsample.txtとしてコピーされます。
FileCopyステートメントの注意点
最後に、FileCopyステートメントを使用する際に気をつけるべき点をいくつか挙げます。
・コピー先に同じ名前のファイルがある場合は、上書きされます。
・コピー先のフォルダが存在しない場合は、エラーが発生します。
・コピー元のファイルが読み取り専用属性を持っている場合は、エラーが発生します。
FileCopyステートメントを使用した自動化の例
Excel VBAにおいて、FileCopyステートメントは、ファイルを自動でバックアップするプログラムの作成に役立ちます。
例えば、毎日特定のファイルを別の場所に自動的にバックアップするように設定することができます。
以下は、毎日午後5時に特定のファイルを別の場所にバックアップするVBAコードの例です。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub BackupFile() Dim sourcePath As String, destinationPath As String Dim fileName As String, backupName As String sourcePath = "C:\Users\YourName\Documents\" destinationPath = "D:\Backup\" fileName = "report.xlsx" backupName = "report_backup_" & Format(Now(), "yyyymmdd") & ".xlsx" '指定したファイルをコピーする FileCopy sourcePath & fileName, destinationPath & backupName End Sub |
上記の例では、”C:\Users\YourName\Documents”にある”report.xlsx”ファイルを、”D:\Backup”にある”report_backup_yyyymmdd.xlsx”ファイルにバックアップします。
backupName変数には、現在の日付を付けたファイル名を作成するためにFormat関数を使用しています。
まとめ
この記事では、Excel VBAにおけるFileCopyステートメントについて説明しました。
FileCopyステートメントは、指定されたファイルを別の場所に簡単にコピーすることができます。
使用する際に気をつけるべき点も挙げました。
また、FileCopyステートメントを使用した自動化の例も示しました。これらの情報を参考にして、VBAを使ったファイルのコピー作業を効率的に行いましょう。
サンプルコード
指定したフォルダ内のファイルを別のフォルダに一括でコピーする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub CopyFiles() Dim sourcePath As String, destinationPath As String Dim file As String, fileCount As Integer sourcePath = "C:\SourceFolder\" destinationPath = "D:\DestinationFolder\" file = Dir(sourcePath) Do While file <> "" FileCopy sourcePath & file, destinationPath & file fileCount = fileCount + 1 file = Dir Loop MsgBox "コピーが完了しました。" & vbCrLf & "コピーされたファイル数:" & fileCount, vbInformation, "情報" End Sub |
上記の例では、”C:\SourceFolder”にあるすべてのファイルを、”D:\DestinationFolder”にコピーしています。
Dir関数を使用して、フォルダ内のファイルを一覧化し、Do Whileループを使って、1つずつファイルをコピーしています。
コピーが完了した後、MsgBox関数でコピーされたファイル数を表示しています。
指定したファイルの更新日付を比較し、新しい場合に別のフォルダにコピーする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub CopyNewFiles() Dim sourcePath As String, destinationPath As String Dim file As String, fileCount As Integer sourcePath = "C:\SourceFolder\" destinationPath = "D:\DestinationFolder\" file = Dir(sourcePath) Do While file <> "" If FileDateTime(sourcePath & file) > FileDateTime(destinationPath & file) Then FileCopy sourcePath & file, destinationPath & file fileCount = fileCount + 1 End If file = Dir Loop If fileCount > 0 Then MsgBox "新しいファイルをコピーしました。" & vbCrLf & "コピーされたファイル数:" & fileCount, vbInformation, "情報" Else MsgBox "新しいファイルはありませんでした。", vbInformation, "情報" End If End Sub |
上記の例では、”C:\SourceFolder”にあるファイルのうち、”D:\DestinationFolder”にある同名のファイルよりも更新日付が新しいものだけをコピーしています。
FileDateTime関数を使用して、ファイルの更新日付を比較しています。
更新日付が新しい場合は、FileCopyステートメントでファイルをコピーしています。
コピーが完了した後、MsgBox関数でコピーされたファイル数を表示しています。
更新日付が新しいファイルがない場合は、別のメッセージを表示します。
コメント