【VBA】BinaryCopy バイナリファイルのコピー処理

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

VBAでバイナリファイルを読み書き・コピーするサンプルコードです。

単にファイルをコピーしたい場合はVBA標準の FileCopy ステートメントを使用するのが最も簡単で高速ですが、バイナリデータとして中身を処理しながらコピーしたい場合は Open / Get / Put ステートメントを使用します。

1. FileCopy ステートメントによる単純コピー

ファイルの内容を変更せず単純にコピーする場合は、FileCopy を使用します。

Sub SimpleCopy()
    Dim srcPath As String
    Dim dstPath As String

    srcPath = "C:\in.bin"
    dstPath = "C:\out.bin"

    FileCopy srcPath, dstPath
End Sub

2. バイナリモード( Get / Put )でブロック単位にコピーする処理

バイナリデータを取得・加工しながら処理する場合は、バイト配列を用いて一定サイズ(バッファ)ごとに読み書きします。1バイトずつ処理すると大容量ファイルで処理時間が著しくかかるため、バッファサイズを指定して効率的に処理します。

Sub BinaryCopy()
    Const INFILE As String = "C:\in.bin"
    Const OUTFILE As String = "C:\out.bin"
    Const BUFFER_SIZE As Long = 65536 ' 64KBバッファ

    Dim inFN As Integer
    Dim outFN As Integer
    Dim fileLen As Long
    Dim bytesToRead As Long
    Dim buffer() As Byte

    inFN = FreeFile()
    Open INFILE For Binary Access Read As #inFN

    outFN = FreeFile()
    Open OUTFILE For Binary Access Write As #outFN

    fileLen = LOF(inFN)

    Do While Loc(inFN) < fileLen
        bytesToRead = BUFFER_SIZE
        If fileLen - Loc(inFN) < bytesToRead Then
            bytesToRead = fileLen - Loc(inFN)
        End If

        ReDim buffer(0 To bytesToRead - 1)
        Get #inFN, , buffer
        Put #outFN, , buffer
    Loop

    Close #inFN
    Close #outFN
End Sub

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月10日

  • 変更VBA文字列でのファイルパス中の不要な二重バックスラッシュを単一のバックスラッシュに修正しました。
  • 変更1バイトずつのループおよびDebug.Printによる著しい処理遅延を避けるため、バッファ配列を用いたバイナリコピー処理に修正しました。
  • 追加単純なファイルコピーを行う場合のFileCopyステートメントのコード例を追加しました。

文書情報

記事タイトル
【VBA】BinaryCopy バイナリファイルのコピー処理
作成日
更新日
Source URL
https://papanda925.com/?p=424

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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