VBAでのテキストファイル入出力の方法はよく知られていますが、バイナリファイルの扱い方はあまり知られていません。
自分が初学者の頃、よくわからなかったので、ここに記したいと思います。
For Binary という宣言と Get 命令を使う部分がポイントです。
例として、バイナリエディタを作れるとよいのですが、サンプルとしては、それは冗長になるので、バイナリビューアを作ってみたいと思います。
Excel上で動作します。
以下のソースとなります。
ソース
Sub Main()
'ファイル選択ダイアログでファイルを指定
Dim vFilePath As Variant
vFilePath = Application.GetOpenFilename
'キャンセルボタンを押されたら、処理終了
If vFilePath = False Then
End
End If
'ファイルサイズが0バイトの場合も処理終了
Dim nFileLen As Long
nFileLen = FileLen(vFilePath)
If nFileLen = 0 Then
End
End If
'空いているファイル番号を取得
Dim iFile As Integer
iFile = FreeFile
'指定されたファイルを取得したファイル番号としてバイナリモードで開く
Open vFilePath For Binary As #iFile
'ファイルサイズ分のバイト配列を用意
Dim bData() As Byte
ReDim bData(0 To nFileLen - 1)
'バイト配列に指定ファイルを展開
Get #iFile, , bData
Close #iFile
Dim i As Long
'ScreenUpdatingやらCalculationなどの高速化設定は割愛
'バイナリデータをダンプ表示します。
For i = 0 To nFileLen - 1
y = i \ 16 + 1
x = i Mod 16 + 1
Cells(y, x) = "'" & Right("0" & Hex(bData(i)), 2)
Next
End Sub
これが古くからのVBAでのやり方です。(ただし、弱点があり、ファイルパスに中国語文字などのUnicode文字が入ると、エラーとなります。)