バイナリファイルの読み込み

バイナリファイルの読み込みをする

VBAでバイナリファイルを読み込むには、Openステートメントのモードに Bainary を指定して開いたファイルに対してGetステートメントを利用することで読み込みすることができます。

サンプルコードでは取得したバイナリデータをアドレス表示の形式でも出力しており、実行結果にはバイナリで正しく読み込めていることを確認するため、同じファイルをバイナリエディタのソフトを利用した画面を貼り付けています。

 ●バイナリデータの読み込み(アドレス表示付き)

'*****************************************************************
' バイナリデータの読み込み
'*****************************************************************
Sub Main_ReadBinary()

    '読込み対象のファイルパス
    Dim sFilePath As String
    sFilePath = "C:\VBA\bin\binary.dll"
    
    'バイナリで読み込み
    Dim sBinData  As String
    sBinData = ReadBinary(sFilePath)
    
    '出力
    Debug.Print "(表示)"
    Debug.Print sBinData
    Debug.Print
    Debug.Print "(アドレス表示)"
    Call setBinAddress(sBinData)

End Sub

'*****************************************************************
' バイナリデータ取得
'-----------------------------------------------------------------
'  第1引数:対象ファイルのパス
'*****************************************************************
Function ReadBinary(getFilePath As String) As String

    'ファイル番号取得
    Dim lFn As Long
    lFn = FreeFile

    'ファイルをバイナリで開く
    Open getFilePath For Binary As #lFn

    '作業領域の設定
    Dim bBin() As Byte
    ReDim bBin(LOF(lFn) - 1)
    
    'データを読込み
    Get #lFn, , bBin
    
    '読込んだデータを編集
    Dim i As Long
    Dim sBinary As String
    For i = 0 To LOF(lFn) - 1
        sBinary = sBinary + Right("00" & Hex(bBin(i)), 2) + Space(1)
    Next
    
    '終端文字追加
    sBinary = sBinary + "(END)"
    
    'ファイルを閉じる
    Close (lFn)
    
    ReadBinary = sBinary
    
End Function

'*****************************************************************
' バイナリのアドレス表示
'-----------------------------------------------------------------
'  第1引数:対象ファイルのパス
'*****************************************************************
Sub setBinAddress(getBin As String)

    'ヘッダ情報を出力
   Debug.Print "ADDRESS  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F"
   Debug.Print "---------------------------------------------------------"

    Dim lPos As Long
    lPos = 0
    
    Dim i As Long
    For i = 1 To Len(getBin)
        '表示用のアドレスを作成
        Dim sAddress As String
        sAddress = Right("00000000" & Hex(lPos), 8) & Space(1)
                
        'バイナリ表示(16バイト分の表示で折り返し)
        Debug.Print sAddress + Mid(getBin, i, 3 * 16)
        
        i = i + 3 * 16 - 1
        lPos = lPos + 16
    Next

End Sub

 ■実行結果

サンプルコードの実行結果
バイナリエディタのソフトで同じファイルを開いた結果