【VBA】ファイルをコピーする

VBAで
 ・ファイルをコピー
できます!

ここでは私が
 ・より便利な方法
を記載します!
※実現方法は複数あります。
より便利な方法を知っておけばよいです。
※「FileSystemObject」を使用した方法です。

PR

ファイル名を変更せずにコピー

「FileSystemObject」の「CopyFile」メソッドの
 ・引数「Source」    : コピーするファイルのパス
 ・引数「Destination」  : コピー先のフォルダのパス
 ・引数「OverWriteFiles」 : コピー先に既にファイルが存在する場合の挙動
  ※上書き(True) or エラー(False)
を指定することで、ファイル名を変更せずにコピーできます。

Option Explicit

Sub sample()
    
    Dim fso As Object
    Dim fileFullPath As String
    Dim folderPath As String
    
    'コピーするファイルのパスを指定
    fileFullPath = "C:\Users\user\Desktop\aiueo.txt"
    
    'コピー先のフォルダのパスを指定
    folderPath = "C:\Users\user\Desktop\folder_001\"
    
    Set fso = CreateObject("Scripting.FileSystemObject")

    'ファイルを変更せずにコピーする
    Call fso.CopyFile(Source:=fileFullPath, _
                      Destination:=folderPath, _
                      OverWriteFiles:=False)
    
    '後片付け
    Set fso = Nothing
    
End Sub

「コピー先のフォルダのパス」には最後に「\」を付けないといけません。
付け忘れると以下のエラーとなります。

エラーメッセージ
エラーメッセージ
PR

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

「FileSystemObject」の「CopyFile」メソッドの
 ・引数「Source」    : コピーするファイルのパス
 ・引数「Destination」  : コピー先のファイルのパス
 ・引数「OverWriteFiles」 : コピー先に既にファイルが存在する場合の挙動
  ※上書き(True) or エラー(False)。
を指定することで、ファイル名を変更してコピーできます。

Option Explicit

Sub sample()
    
    Dim fso As Object
    Dim fileFullPath As String
    Dim copyFileFullPath As String
    
    'コピーするファイルのパスを指定
    fileFullPath = "C:\Users\user\Desktop\aiueo.txt"
    
    'コピー先のファイルのパスを指定
    copyFileFullPath = "C:\Users\user\Desktop\folder_001\copyfile.txt"
    
    Set fso = CreateObject("Scripting.FileSystemObject")

    'ファイル名を変更してコピーする
    Call fso.CopyFile(Source:=fileFullPath, _
                      Destination:=copyFileFullPath, _
                      OverWriteFiles:=False)
    
    '後片付け
    Set fso = Nothing
    
End Sub
PR

複数のファイルをコピー

ワイルドカードを使用することで、複数のファイルを1度にコピーできます。
詳細は以下の記事を参照してください。

PR

備考(引数「OverWriteFiles」について)

●引数「OverWriteFiles」を「省略」または「True」を指定した場合
コピー先に同名ファイルが存在した場合、強制的に上書きされます。

●引数「OverWriteFiles」に「False」を指定した場合
コピー先に同名ファイルが存在した場合、エラー「既に同名のファイルが存在しています」が発生します。

エラーメッセージ
エラーメッセージ

つまり引数「OverWriteFiles」により
 ・コピー先に同名ファイルが存在した場合の挙動を指定
できます。

PR

備考(ファイルをコピーする前に実施しておきたいこと)

コピー後のファイルが既に存在している場合、コピーは不要で場合もあると思います。

その場合は、コピー後のファイルの存在有無を確認してからコピーしましょう。
詳細は以下の記事を参照してください。


コピー後のファイルが既に存在している場合、削除してからコピーすべき場合もあると思います。

その場合は、コピー後のファイルを削除してからコピーしましょう。
詳細は以下の記事を参照してください。

PR

備考(FileCopy関数によるファイルのコピー)

FileCopy関数でもシンプルなファイルのコピーはできますが、以下ができません。

FileCopy関数でできないこと
  • ワイルドカードを使用した複数ファイルのコピー

  • コピー先に同名ファイルが存在した場合の挙動の指定
    存在した場合は必ず上書きされます。

「FileSystemObject」でできることが、FileCopy関数ではできません。
よってFileCopy関数の使用はオススメしません。

名前が似ているため間違えやすいです。

・「FileSystemObject」のメソッドの方は「CopyFile」。
・「関数」の方は「FileCopy」。

PR

参考

上記で紹介した方法の詳細は、公式サイトをご確認ください。

●「FileSystemObject」の「CopyFile」メソッド


●FileCopy関数

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