【サンプル付き】バイナリーファイル読み込みJISコード付き

今日はVBAを使ってバイナリーファイルを読み込んで見よう!

JISコード付きの手法を紹介するね!

エクセルワークシート上に下記図のような形式でバイナリーファイルを読み込みます。

目次

バイナリーファイル読み込みJISコード付き サンプル

バイナリーファイルのデータをエクセルファイルに読み込みたい

今回はShift_JIS の文字コードから文字に変換するChr関数を使って、バイナリーファイルエディターのようにバイナリーファイル(*.bin)をエクセルファイルに読み込みます。拡張子.binファイルデータの整形やデータ確認したいときに便利です。

ワークシート”Binary”を準備して、下記コードを動かしてみて下さい。

二次元配列変数の行数を1000としているため、ファイルサイズに注意して、大きいサイズのバイナリーファイルを扱う場合は、30行目BinData、107行目JisDataの値”1000″を”10000″などに拡張して下さい。

Sub ReadBinaryFile()

    Application.ScreenUpdating = False
    ThisWorkbook.Worksheets("Binary").Activate

    'データクリア
    Range("A1").CurrentRegion.ClearContents
    Range("S1").CurrentRegion.ClearContents
    
    
    MsgBox "データをクリアしました(`・ω・´)ゞ"

    Dim buff() As Byte
    Dim filesize As Long, NowLoc As Long
    Dim idx As Long, gyo As Long
    Dim strBinary As String
    Dim j As Long, i As Long
    Dim v As Variant
    Dim bkPath As String
    Dim BinData As Variant
    Dim JISData As Variant
    
    MsgBox "Excelに読み込みたいbinファイルを選択してね(o・ω・o)ノ"
    bkPath = Application.GetOpenFileName("すべてのファイル, *.bin", , "binファイルを選択して下さい")

    If bkPath <> "False" Then
        Open bkPath For Binary As #1
        
        '二次元配列の箱を準備
        BinData = Range(Cells(3, 1), Cells(1000, 17))
        
        '全セルの表示形式を文字列に変更
        ActiveSheet.Cells.Select
        Selection.NumberFormatLocal = "@"
        Cells.Font.Name = "Meiryo UI"
        
        'ヘッダー情報をワークシートに出力
        Cells(1, 2) = "00"
        Cells(1, 3) = "01"
        Cells(1, 4) = "02"
        Cells(1, 5) = "03"
        Cells(1, 6) = "04"
        Cells(1, 7) = "05"
        Cells(1, 8) = "06"
        Cells(1, 9) = "07"
        Cells(1, 10) = "08"
        Cells(1, 11) = "09"
        Cells(1, 12) = "0A"
        Cells(1, 13) = "0B"
        Cells(1, 14) = "0C"
        Cells(1, 15) = "0D"
        Cells(1, 16) = "0E"
        Cells(1, 17) = "0F"
        
        Cells(2, 1) = "                    --------------------------------------------------------------------"
        Cells(2, 19) = "0123456789ABCDEF"
                
        gyo = 1
        
        Do While NowLoc < LOF(1)
            '最大16バイト分の領域を確保し初期化
            If (LOF(1) - NowLoc) >= 16 Then
                '残りのファイルサイズが16バイト以上のとき
                ReDim buff(15)
            Else
                '最終読み込み時(497バイト~500バイト目)は残りのファイルサイズが16未満
                ReDim buff(LOF(1) - NowLoc - 1)
            End If
            
            'データ読み込み
            Get #1, , buff
            
            '表示用のアドレス生成("00000000"とHexの戻り値を連結した文字列の右から8文字)
            strBinary = Right("00000000" & Hex(NowLoc), 8) & " "
            
            '現在位置を保持する(ループBreak判定用)
            NowLoc = Loc(1)
            
            '出力文字列を生成
            For idx = 0 To UBound(buff)
                strBinary = strBinary + Right("00" & Hex(buff(idx)), 2) + " "
            Next
            
            v = Split(strBinary, " ")
            
            For j = 1 To 17
                
                BinData(gyo, j) = v(j - 1)
            
            Next
            
            gyo = gyo + 1
            
        Loop
        
    Close #1
        
    Else
        MsgBox "Binファイルが正しく選択されなかったので終了します。"
        Exit Sub
    End If

    '二次元配列からセルに一括書き戻し
    Range(Cells(3, 1), Cells(1000, 17)) = BinData
    
    '二次元配列の箱を準備
    JISData = Range(Cells(3, 19), Cells(1000, 19))

    For j = 1 To UBound(JISData)
        If BinData(j, 1) = "" Then
            Exit For
        End If
        
        For i = 2 To 17
            If BinData(j, i) = "00" Or BinData(j, i) = "0A" Then
                JISData(j, 1) = JISData(j, 1) + "・"
            Else
                JISData(j, 1) = JISData(j, 1) + Chr(CInt("&H" & BinData(j, i)))
            End If
            
        Next

    Next

    '二次元配列からセルに一括書き戻し
    Range(Cells(3, 19), Cells(1000, 19)) = JISData

    Range("A1").ColumnWidth = 10
    Range("R1").ColumnWidth = 2
    Columns("B:Q").AutoFit
    Columns("S").AutoFit

End Sub

まとめ

このサンプルを活用いただけると、バイナリーエディターのようにエクセルにバイナリーファイルを読み込むができます。

この記事がミス削減や生産性向上につながるととても嬉しいです。

VBA初級から抜け出すための知恵と、実務で活用できるスキルが学べる1冊です!激しくオススメ!

bookfan 2号店 楽天市場店
¥1,980 (2024/12/10 16:26時点 | 楽天市場調べ)

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

この記事を書いた人

ものおと申します。

10年以上の大手メーカー勤務経験のあるエンジニアです。

これまでのものづくりの経験から小学生にも伝わるExcel VBAお役立ち記事を発信していきたいと思います。

よろしくお願いします。

コメント

コメントする

CAPTCHA


目次