• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでバイナリエディタを作ろうとしています)

VBAでバイナリエディタを作る方法とは?

このQ&Aのポイント
  • VBAを使用してバイナリエディタを作成し、テキストファイルをバイナリデータとして開いて16進数のダンプファイルに保存することはできます。しかし、逆の操作を行うことができない問題があります。
  • バイナリデータをテキストデータに変換し、16進数に変換して保存したテキストファイルをダイアログから呼び出して元のテキストに戻す方法を探しています。VBAのhex関数やchr関数を使用する必要があるかもしれません。
  • VBA初心者であるため、根本的な部分で間違いがあるかもしれません。助けていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

テキスト⇔テキスト変換でしょ? "ABC"⇔"414243" 文字から16進数にする場合 Function 文字からヘキサ(ByVal 文字列 As String) As String Dim 長さ As Long Dim 位置 As Long Dim コード As Long Dim 戻り値 As String For 位置 = 1 To Len(文字列)     コード = Asc(Mid(文字列, 位置, 1))     If コード >= 0 And コード < 16 Then         戻り値 = 戻り値 & "0" & Hex(コード)     Else         戻り値 = 戻り値 & Hex(コード)     End If Next 文字からヘキサ = 戻り値 End Function 16進数の文字列から文字を復元する場合 Function ヘキサから文字(ByVal ヘキサ As String) As String Dim 長さ As Long Dim 位置 As Long Dim コード As Long Dim 戻り値 As String For 位置 = 1 To Len(文字列) Step 2     コード = Val("&H" & Mid(文字列, 位置, 2))     Select Case コード       Case 0 To 127,161 To 223 '★英数字とカナ       Case Else         コード = Val("&H" & Mid(文字列, 位置, 4))         位置 = 位置 + 2     End Select     戻り値 = 戻り値 & Chr(コード) Next ヘキサから文字 = 戻り値 End Function それから1バイトずつ読み込まないで、まとめて読みましょう。 ファイルサイズはFileLenか、LOF(ファイル番号)で得られます。 最初からそのサイズの配列を作ってGetすれば1回で読めます。 サイズ = FileLen(fname) ReDim str(サイズ - 1) Open fname For Binary As #1 Get #1, , str Close #1 あと、ADODB.Streamオブジェクトを使う方法もあります。 Dim S As Object Dim 集合, 個別, 文 Set S = CreateObject("ADODB.Stream") S.Open S.LoadFromFile "text.txt" S.Positon = 0 S.Type = 1 'バイナリとして扱う 集合 = S.Read '集合はByte型配列になり、全データが入る 'バイト単位の処理 For Each 個別 In 集合    ・・・コード値として処理 Next S.Positon = 0 S.Type = 2 'テキストとして扱う S.Charset = "Shift_Jis" '文字列の場合は文字コードを指定 文 = S.ReadText '文にファイルの全文字が入る Positionを先頭に戻せば、Typeを変更できるので、 同じファイル内容をByte配列でも文字列でも取り出せます。 また、漢字コード系を変換したりもできます。 保存する場合は S.SaveToFile "~", 2 (2は上書き許可) とします。

noname#198479
質問者

お礼

ありがとうございます! なんとかできました。 こんな簡単に全体の配列の要素数を指定できるんですね! すこしずつ数をこなして慣れていこうと思います。

その他の回答 (1)

  • ssfja
  • ベストアンサー率57% (11/19)
回答No.1

始めて間もない人は、 実際に動いているソフトのコードを見て 参考にするのが、上達への道だと思います。 http://code.google.com/p/cowares-excel-hello/wiki/type_bin VBScript で書かれた、バイナリエディタの種です。 バイナリファイルと16進ダンプの双方向変換の エッセンスがわかると思います。

参考URL:
http://code.google.com/p/cowares-excel-hello/wiki/type_bin
noname#198479
質問者

お礼

拝見させてもらいましたがけっこう難しかったです・・・ しかし実際に動いているソースを見るのはためになりますね。 心がけます。

関連するQ&A