VBAでファイルのコピー

投稿日: 2024年6月18日

VBAでファイルをコピーするには、FileSystemObjectを使用する方法が一般的です。
まずコピー元のデータを用意します。このコードでは「file.txt」のテキストファイルを指定しています。適宜変更してください。

Sub CopyFile()
    Dim fso As Object
    Dim sourcePath As String
    Dim destinationPath As String
    
    ' ファイルシステムオブジェクトを作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' コピー元のファイルパス
    sourcePath = "C:\path\to\your\source\file.txt"
    
    ' コピー先のファイルパス
    destinationPath = "C:\path\to\your\destination\file.txt"
    
    ' ファイルをコピー
    fso.CopyFile sourcePath, destinationPath
    
    ' オブジェクトの解放
    Set fso = Nothing
    
    MsgBox "ファイルのコピーが完了しました"
End Sub

sourcePathとdestinationPathでコピー元とコピー先のファイルパスを指定します。「fso.CopyFile sourcePath, destinationPath」でファイルをコピーします。
このコードではテキストファイルをコピーしていますが、PDFファイルやWordファイルもコピー保存できます。

コピー先のファイル名に日付を追加する

コピー先のファイル名に日付をつける事もできます。こうすることでファイルの管理がやりやすくなります。

Sub CopyFileWithDate()
    Dim fso As Object
    Dim sourcePath As String
    Dim destinationFolder As String
    Dim fileName As String
    Dim dateSuffix As String
    Dim destinationPath As String
    Dim fileExtension As String

    ' ファイルシステムオブジェクトを作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' コピー元のファイルパス
    sourcePath = "C:\path\to\your\source\file.txt"
    
    ' コピー先のフォルダパス
    destinationFolder = "C:\path\to\your\destination\"
    
    ' 元ファイル名を取得
    fileName = fso.GetBaseName(sourcePath)
    
    ' 日付をフォーマットして取得
    dateSuffix = Format(Now, "yyyymmdd")
    
    ' 拡張子を取得
    fileExtension = fso.GetExtensionName(sourcePath)
    
    ' 新しいファイル名を作成
    destinationPath = destinationFolder & fileName & "_" & dateSuffix & "." & fileExtension
    
    ' ファイルをコピー
    fso.CopyFile sourcePath, destinationPath
    
    ' オブジェクトの解放
    Set fso = Nothing
    
    MsgBox "ファイルのコピーが完了しました: " & destinationPath
End Sub

GetBaseNameメソッドで元ファイルのベース名(拡張子を除いた部分)を取得します。
GetExtensionNameメソッドで元ファイルの拡張子を取得します。コピー先のファイル名を元ファイル名と日付、拡張子を組み合わせて作成します。

FSOのメソッド

ここで色々とファイル関連のコードで使用するFSOのメソッドを紹介します。

メソッド詳細構文
CreateTextFile新しいテキストファイルを
作成します。
FSO.CreateTextFile(
filename As String,
[overwrite As Boolean], [unicode As Boolean])
OpenTextFile既存のテキストファイルを
開きます。
FSO.OpenTextFile(
filename As String,
[iomode As Integer], [create As Boolean], [format As Integer])
GetFile指定したパスのファイルを
取得します。
FSO.GetFile(filespec As String)
GetFolder指定したパスのフォルダを
取得します。
FSO.GetFolder(folderspec As String)
GetDrive指定したパスのドライブを
取得します。
FSO.GetDrive(drivespec As String)
GetSpecialFolder特殊フォルダのパスを
取得します。
FSO.GetSpecialFolder(folderspec As Integer)
DeleteFile指定したファイルを
削除します。
FSO.DeleteFile(filespec As String, [force As Boolean])
DeleteFolder指定したフォルダを
削除します。
FSO.DeleteFolder(folderspec As String, [force As Boolean])
CopyFile指定したファイルを
コピーします。
FSO.CopyFolder source As String,
destination As String, [overwrite As Boolean]
MoveFile指定したファイルを
移動します。
FSO.MoveFile source As String, destination As String
MoveFolderファイルが存在するか
確認します。
FSO.MoveFolder source As String, destination As String

これらのメソッドを使用して、ファイルやフォルダの作成、コピー、移動、削除、存在確認など様々な操作を行うことができます。

記事