エクセルVBAでファイルをコピーするとき上書き保存を確認する

エクセルVBAでファイルをコピーする場合、FileCopy ステートメントを使います。FileCopy ステートメントは使いやすいですが、無条件にファイルをコピーします。同じファイルが指定したフォルダにあった場合でも、上書き保存してしまいます。これでは困る! といった場合に、同じファイルが存在した場合、それをメッセージを出して確認することができます。ここでは、エクセルVBAで、同じファイルがあった場合、確認メッセージを出して、上書き保存するかコピーをキャンセルするか選択して、処理する方法を紹介しています。これなら、上書き保存される心配はありません。エクセルVBAでコピーをする時、上書き保存したい場合は、「OK」ボタンをクリックするだけで上書き保存できます。

 

 

FileCopy ステートメント

ファイルをコピーするには、FileCopy ステートメントを使います。

FileCopy ステートメントの構文

FileCopy source, destination

source は、コピー元の場所を表すファイルのパス、 destination は、コピー先のファイルの場所を表すパスを指定します。

 

 

FileCopy は無条件で上書きコピーする

エクセルVBAでファイルをコピーする場合、FileCopy ステートメントを使いますが、使用する場合は幾つか注意する点があります。

destination で指定したファイル名と、同じファイル名がコピー先のフォルダにあった場合、ファイルは上書きされます。

FileCopy ステートメントは、確認のメッセージが出ることなく、無条件に上書きするので、上書きされないようにするには、指定したファイル名と同じファイル名がコピー先のフォルダにあった場合、確認メッセージを出すように設定する必要があります。

それには、Dir 関数を使って確認します。

ファイルの存在を確認してからファイルをコピー

エクセルVBAでファイルをコピーする時に、指定したフォルダに同じファイルがあったら、メッセージを出すコードです。

同じファイル名がなかったら、そのままファイルがコピーされます。同じファイル名があったら、メッセージが出て上書き保存されません。

「お客様専用」フォルダにある「契約者名」ファイルを、「2018年度契約」フォルダにコピーしてみましょう。

「2018年度契約」フォルダに、「契約者名」ファイルがあったら、メッセージがでます。

Sub ファイルの所在確認()
If Dir(“D:\2018年度契約\契約者名.xls”) = “” Then
FileCopy “D:\お客様専用\契約者名.xls”, “D:\2018年度契約\契約者名.xls”
Else
MsgBox “D:\2018年度契約\契約者名.xls” & vbCrLf & _
“が存在します。”, vbInformation
End If
End Sub

 

 

上書きのメッセージを出してキャンセルまたは上書き保存する

エクセルVBAでファイルをコピーする時に、上書き保存の確認メッセージを出すコードです。

指定したフォルダに同じファイルがあったら、「上書き保存」するか、「キャンセル」するかメッセージを出して、どちらか選択してファイルをコピーします。

Sub ファイルの上書き保存を確認()
Dim rc As VbMsgBoxResult
rc = MsgBox(“同じファイルが存在します。” & vbCrLf & _
“上書きしますか?”, vbYesNo + vbQuestion)
If Dir(“D:\2018年度契約\契約者名.xls”) = “” Then
FileCopy “D:\お客様専用\契約者名.xls”, “D:\2018年度契約\契約者名.xls”
ElseIf rc = vbNo Then
MsgBox “処理を中止します”, vbCritical
Else
FileCopy “D:\お客様専用\契約者名.xls”, “D:\2018年度契約\契約者名.xls”
MsgBox “上書き保存しました。”, vbInformation
End If
End Sub

「vbYesNo」は、「はい」ボタンと「いいえ」ボタンを表示します。

「OK」ボタンと「キャンセル」ボタンを表示したい場合は、「vbOKCancel」を指定します。

 

 

ファイルの名前を変更してコピー

エクセルVBAで、ファイルの名前を変更してコピーするコードです。

「お客様専用」フォルダにある「契約者名」ファイルを、「2018年度契約」フォルダに、「契約№登録表」とファイル名を変更してコピーしてみましょう。

「2018年度契約」フォルダに、「契約者名」ファイルがあったら、メッセージがでます。

「いいえ」のボタンをクリックすると、処理がキャンセルされます。

「はい」のボタンをクリックすると、「2018年度契約」フォルダに、「契約者名」ファイルとは別に、「契約№登録表」ファイルが作成されます。

Sub 上書き保存を確認して別名でファイルをコピー()
Dim rc As VbMsgBoxResult
rc = MsgBox(“同じファイルが存在します。” & vbCrLf & _
“上書きしますか?”, vbYesNo + vbQuestion)
If Dir(“D:\2018年度契約\契約者名.xls”) = “” Then
FileCopy “D:\お客様専用\契約者名.xls”, “D:\2018年度契約\契約№登録表.xls”
ElseIf rc = vbNo Then
MsgBox “処理を中止します”, vbCritical
Else
FileCopy “D:\お客様専用\契約者名.xls”, “D:\2018年度契約\契約№登録表.xls”
MsgBox “上書き保存しました。”, vbInformation
End If
End Sub

こちらの記事もご覧ください。⇒エクセルVBAが初心者でも短期間でマスターできる楽パソ!音声と映像で自宅で学べる。

こちらの記事もご覧ください。⇒プログラミングスキルが初心者でも短期間でマスターできる楽パソ!音声と映像で自宅で学べる。

ファイルの存在を確認

エクセルVBAで、ファイルの存在を確認するには、Dir関数を使います。ここではエクセルVBAでファイルをコピーする時、上書き保存の確認する場合に使いました。FileCopy ステートメントはコピー元のファイルがなかったり、指定したフォルダがなかった場合にエラーになるので、コピー元のファイルや、コピー先のフォルダの存在を確認したいときにも使えます。ファイルのコピーはよく使う操作です。ファイルをコピーするフォルダが奥深い場所になる場合は、フォルダを探すのも大変です。同じファイルをコピーする作業がよくある場合は、エクセルVBAでファイルをコピーした方が一発で簡単にできます。

こちらの記事もご覧ください。⇒エクセルVBAでファイルをコピーする!

エクセル・ワード・パワーポイント・アクセス・マクロVBA・WEBプログラミングを入門から応用までらくらくマスターできる ➡ 動画パソコン教材

エクセルのマクロとVBAを入門から応用まで映像と音声でわかりやすく学ぶことができます。
↓ ↓ ↓ ↓ ↓
ワード・エクセルパワーポイント・アクセスとエクセルマクロVBA・WEBプログラミング・パソコンソフト作成を入門から応用まで映像と音声でわかりやすく学ぶことができます。
↓ ↓ ↓ ↓ ↓
VBA・Java・WEB・C#・HTML/CSSプログラミングを入門から応用まで映像と音声でわかりやすく学ぶことができます。
↓ ↓ ↓ ↓ ↓
ワード・エクセル・パワーポイント・アクセスを入門から応用まで映像と音声でわかりやすく学ぶことができます。
↓ ↓ ↓ ↓ ↓

ワード・エクセル・パワーポイント・アクセスとWEBプログラミングを入門から応用まで映像と音声でわかりやすく学ぶことができます。
↓ ↓ ↓ ↓ ↓