【VBA】位置を指定してバイナリファイルを読み書きする

0

    <機能>

    ・テスト用のバイナリファイルを出力します

    ・位置を指定してファイルに書き込みを行います

    (Putステートメント)

    ・Seekで位置を指定してファイルから読み込みを行います

    (Getステートメント)

     

    <動作検証>

    Microsoft Office 2016

     

    <実行イメージ>

    指定位置(1062バイト目/1077バイト)から書き込みを実施

    全角8文字(16バイト)を書き込み

    Putステートメントでバイナリファイル書き込み(VBA)

     

    先頭から37バイト目から全角26文字を読み込み

    Seekで位置指定,Getステートメントでバイナリファイル読み込み(VBA)

     

    <使い方>

    適当なところにソースを貼り付けてください

    バイナリファイルを読み書き() を実行すると処理を開始します

     

    '********************************************
    'ファイルポインタ(位置)を指定してファイルを読み書き
    '********************************************

    Sub バイナリファイルを読み書き()
        Dim strFile As String
        Dim fp As Long, fileLen As Long
        Dim strbuf As String * 26
       
        '//ファイル名を生成
        strFile = ThisWorkbook.Path & "¥binaryTest.dat"
       
        '//テスト用バイナリデータをファイルへ書き込み
        Call TestFileWrite(strFile)
       
        '//バイナリモードでファイルをオープン
        fp = FreeFile
        Open strFile For Binary As #fp
        '//ファイルサイズを取得
        fileLen = LOF(fp)
        '//最後の8文字(16バイト)にデータを書き込み
        '//第2引数には先頭から書き込む場合は1を指定する

        Put #fp, (fileLen - 16) + 1, "さいごの8バイト"
       
        '//読み込み位置にポインタ移動
        Seek #fp, 37
        '//26文字[ABCDEFGHIJKLMNOPQRSTUVWXYZ]読込
        Get #fp, , strbuf
        Debug.Print strbuf
       
        '//ファイルを閉じる
        Close (fp)
        MsgBox "おわりました", vbInformation
    End Sub
    '********************************************
    'バイナリデータをテストファイルに出力
    '********************************************

    Sub TestFileWrite(ByVal strfil As String)
        '//バイナリファイルの1バイト毎の入出力にはByte型を用いる
        Dim strbuf As String * 1024
        Dim i As Integer
        Dim fp As Long
        '//書き込みデータをセット
        strbuf = "abcdefghijklmnopqrstuvwxyz0123456789" & _
                    "ABCDEFGHIJKLMNOPQRSTUVWXYZ" & _
                    "0123456789月火水木金土日あいうえおかきくけこ"
        '//FreeFile関数で使用可能なファイル番号を割り当て
        fp = FreeFile
        '//ファイルが存在する場合は指定アドレスが上書きされるだけのため
        '//書き込み前にファイルを削除するか中身を一旦クリアする

        Open strfil For Output As #fp
        Close (fp)
        '//ファイルオープン(バイナリ書き込みでオープン、ファイルが存在しない場合は新規作成)
        '//モードに下記のいずれかが指定されていればファイルが存在しない場合、新規作成されます
        '//追加モード(Append)、バイナリモード(Binary)、出力モード(Output)、ランダムアクセスモード(Random)

        Open strfil For Binary Access Write As #fp
        '//ファイルに書き込み(ファイル先頭からの書き込みを明示)
        Put #fp, 1, strbuf
       
        '//ファイルを閉じる
        Close (fp)
    End Sub

     

    よろしければポチッと押してください


    selected entries

    categories

    calendar

    S M T W T F S
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
    << March 2024 >>

    profile

    others

    archives