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ステートメントのコード例を追加しました。
