• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAのバイナリ出力について)

VBAのバイナリ出力について

jcctairaの回答

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.2

akichan1jp さん こんにちは。 次のプログラムでできると思います。 Sub test()  TEMP = Worksheets("Sheet1").Range("C3")  ReDim BIN(Len(TEMP) / 2 - 1) As Byte  For I = 1 To Len(TEMP) Step 2    BIN((I - 1) / 2) = Val("&H" & Mid(TEMP, I, 2))  Next I  Open "1.BIN" For Binary As #1  Put #1, , BIN  Close #1 End Sub 注)"1.BIN"は事前に削除した方が安全です。   例えばファイルの大きさが小さくなると、前のファイルの大きさがに維持されてしまいます。   ご注意ください。 ご確認下さい。

akichan1jp
質問者

お礼

jcctairaさん、ご回答ありがとうございます。 やってみたところ、できました! 自分でも、このソースを見てどうやっているのか 勉強したいと思います。 ありがとうございました!

関連するQ&A

  • VBA バイナリ―から文字列にする方法

    この度はお世話になります。 現在、バイナリ―ファイル(xxxx.bin)をVBAで読み込み、バイナリ―データを文字列化して、エクセルで解析できるようなシートを作っています。 バイナリ―ファイルの中身が31 39 32 31 ・・・・・となっていたら、31393231・・・と文字列化にしたいです。 そこで、自分でプログラムを考えてみたのですが、バイナリ―が 01 などの場合、など“1”として読み込まれて、“0”が入らず、ずれてしまいます。 Sub 電文解析プログラム() Dim Deciphering_file As Variant '読み込みファイル Dim buf As Byte '1バイト格納 Dim fLen As Long 'ファイルサイズ Dim TEMP(1) As String ' Dim S_JIS As String '文字コード(2バイト) Dim str As String '文字列データ Dim i As Long Deciphering_file = Application.GetOpenFilename("BINファイル(*.bin),*.bin") fLen = FileLen(Deciphering_file) Open Deciphering_file For Binary As #1 For i = 1 To fLen Get #1, i, buf S_JIS = Hex(buf) If buf = 0 Then S_JIS = "00" End If TEMP(0) = Mid(S_JIS, 1, 1) TEMP(1) = Mid(S_JIS, 2, 1) str = myChr & TEMP(0) & TEMP(1) Next i End Sub ホントは3行くらいで済みそうな気がするんですが、あまりプログラミングをやったことありません。なので、すみませんがご教授お願いいたします。

  • VBAでバイナリエディタを作ろうとしています

    テキストファイルを内部でバイナリとして開いて 16進数のダンプファイルとして新たなテキストに保存することはできたのですが 逆がどうしてもできません。 やり方としては、 03 E3 BD 71 80… のようなテキストデータをバイナリにして16進数にして保存したテキストファイルをダイアログから呼び出してもう一度元のテキスト文章に戻すという作業です。 とりあえず、まずは以下のコードでエクセル内で16進数を元の文章データに変換しようとしています。 Sub binaryToText() Dim fname As String Dim str() As Byte Dim row As Integer row = 1 fname = "Test.txt" '16進数ファイル Open fname For Binary As #1 Do Until EOF(1) ReDim Preserve str(row) Get #1, , str(row) row = row + 1 Loop Close #1 End Sub hex関数やchr関数を使う必要があるのでしょうか? VBAは始めたばかりで根本的なところで間違っているかもしれませんがよろしくお願いします。

  • VBAでバイナリデータが上手く読めない。

    VBAでバイナリデータが上手く読めない。 もともとC言語でバイナリデータを加工していた事をVBAでやる事になったのですが、上手く読めない。 <VBA> Open inputFileName For Binary As #mFileNo のようにオープンして、 <VBA> Dim a(800) As Byte Get #1, , a のように記述すればC言語のように取得出来ると思ったのですが、上手く取得出来ません。 なんとなく分かった事ですが、800バイトの中に改行文字があった場合、そこまでを変数aに入れるようにすると出来そうなので、Getで改行コードがあった場合はそこまでを読み込むみたいな手段はありますでしょうか。inputだとデータがまったく見れませんでしたのでGetにて対応したいと思っています。 宜しくお願い致します。

  • VBAを使って、一部バイナリデータを読み書き

    VBAを使って、一部バイナリデータを読み書きする方法 を教えてください。 あるファイルが1行目から30行目までが普通のASCII形式でデータが書き込まれており、 31行目以降はバイナリデータとなっています。 また、30行目にheader endと書かれています。 このデータを30行目までは文字列データとして抽出し、 31行目以降はバイナリデータとして抽出して、 少し内容を書き換えてから、最初と同様に 30行目までをASCII、31行目以降をバイナリデータとして出力したいのですが どのようにすれば良いですか? http://homepage2.nifty.com/kasayan/vba/binary.htm http://hanatyan.sakura.ne.jp/vbhlp/Binary.htm バイナリデータの読み込み方は上記のページに書かれてあるのですが いずれも、ファイルをまるごとバイナリ形式として読み込むもので 一部だけバイナリとして読み込むことはできないようです。 どなたかどうすれば良いか教えてください。

  • エクセルVBAにてテキスト出力がうまくいきません

    エクセルシートの1列に以下のような文字列を打ち込みました。 - a aa aaa aaaa aaaaa - b bb bbb bbbb bbbbb - c cc ccc cccc ccccc - 「-」の2行後をテキストを出力した際のファイル名とし、ファイル名を含んだ次の「-」までの文字列をそのテキストの中に出力したいです。なお、全体の行数は分かっています。 例えば上の文字列に対して実行すると、 a.txt b.txt c.txt というファイルができ、それぞれの中には a aa aaa aaaa aaaaa などがそれぞれ出力されるようにしたいです。 Sub tepa() Dim strFilename As String Dim FileNumber As Integer Dim strREC As String j = 1 For i = 1 To 70 If Cells(i, 1) = "-" Then strFilename = Cells(i + 2, 1) & ".txt" Do While Cells(i + j, 1) <> "-" If i > 70 Then Exit Sub End If FileNumber = FreeFile strREC = Cells(i + j, 1) Open strFilename For Append As FileNumber Print #FileNumber, strREC Close j = j + 1 Loop End If i = i + j Next End Sub さきほど初めてVBAなるものを知り、見よう見まねで書いてみましたが・・・ループに陥ったりテキストファイルが1つめしか出力されなかったりとうまくいきません。 改善点など教えていただけたら嬉しいです。 よろしくお願いします。

  • ACCESS VBA でのバイナリデータ操作について

    ACCESS VBA でのバイナリデータ操作について いつも参考にさせていただいております。ありがとうございます。 テキストファイルがあるとし、 日本語(UTF-16 BE)で   あいう というデータとします。 バイナリモードで確認すると、 30 42 30 44 30 46 と表示されます。 この文字コードを使って文字を生成したいのですが、 http://support.microsoft.com/kb/404928/ja 上記を参照し、 ByteData = InputB(6, #1) ChrB(cint("&H" & Hex(ByteData(1)))) & ChrB(cint("&H" & Hex(ByteData(0)))) という方法で「あ」を生成させることはできたのですが、 全角空白があった場合、ただしくコードを取得させることができません。 たとえば、「あ う」(←[あ]と[う]の間が全角空白です)の場合、 バイナリモードで確認すると、 30 42 30 00 30 46 なのですが、「00」を取得することができず、 hex(ByteData(0)) = 30 hex(ByteData(1)) = 42 hex(ByteData(2)) = 30 hex(ByteData(3)) = 30 hex(ByteData(4)) = 46 となってしまいます。 なぜなのでしょうか? また、他によい方法はありますでしょうか? ご指導よろしくお願いいたします。

  • ExcelVBA バイナリファイルの全半角の判断

    Excel VBAでテキストファイルを、バイナリファイルとして読込み シートに出力しようとしています。 しかしテキストファイルには全角半角が混ざっており、うまく出力できません。 Dim buf As Byte 上記の変数に読込んだバイナリデータ1バイト分を入れるとして、 これが半角文字なのか、全角文字の半分なのか、判断することはできるのでしょうか。

  • VBAでUTF-8テキストファイル作成したい

    VBA,文字コードなどにあかるくない初心者です。 VBAを利用して、エクセルのとあるセルに記載されている文字を UTF-8形式でテキストファイルに出力させたいと考えています。 (多言語対応のため・・・、韓国語や中国語でセルに記載された文字を  UTF-8形式でテキストファイルに文字化けしないよう出力させたいためです。) どのように実現が可能か、いくつか検索をしてみましたが 難しくてわかりませんでした。 VBAのサンプルコードを教えていただけないでしょうか。 もしくは、初心者でもわかりやすい実現方法が記載されたサイトを教えていただけないでしょうか。 よろしくお願い致します。 ※今文字コードを意識せずに下記のようなVBAを書いています。(簡略化して記載しています。) Sub test() Open "C:\Sample\Data.txt" For Output As #1 'ファイルを新規作成 'データ書き込み Print #1, Cells(1, 1) Close #1 End Sub

  • エクセルVBA ファイル名を変えながらtxtファイルに出力する方法

    エクセルVBA初心者です 名前/科目 国語 数学 英語 合計 A 53 45 12 110 B 58 59 74 191 C 80 69 58 207 D 45 97 66 208 E 35 85 53 173 F 89 13 79 181 このシート内容を一行ずつテキストファイルに出力したいと考えております。 ファイル名を 生徒A.txt のように生徒・セルの値にしたい場合はどのようにすればよいでしょうか? 分かる範囲で書いたものを載せました アドバイスよろしくお願いします。 Sub test1() Dim ken As Long Dim i As Integer Dim j As Integer Dim fn As Integer fn = FreeFile() ken = Range("a65536").End(xlUp).Row For i = 2 To ken Open "C:\■■■.txt" For Output As #fn For j = 1 To 5 Write #fn, Cells(i, j); Tab; Next j Print #fn, "" Close #fn Next i End Sub

  • VBA(Access)でバイナリデータから日付を取得したい。日付は生年

    VBA(Access)でバイナリデータから日付を取得したい。日付は生年月日なのですが、VC++で行っていた作業を今度はVBA(Access)でやる事になり困っています。 <C++> int n,fd; char str[805],birthday[20],*p; fd = open(path, O_RDONLY); n = read(fd, str, 0x800); p=&buf[5*16+5+(16*21+6)]; sprintf(birth,"%08d",*((unsigned int*)(p-4))); 上記だと西暦がちゃんと取れます。 例>1990年4月5日だと⇒19900405のように取れます。 <VBA> VBA(Access)の場合どのように作成すれば良いでしょうか。 Dim b As String * 800 Dim str As String * 20 Open "Path.dat" For Binary As FreeFile Get # FreeFile, , b *適当に書いてしまいました。 str = mid$(b,55,8)   '←分からない部分 C++だと分かるのですが、VBAではどのように記述するのでしょうか。 とても雑で見にくいプログラムになっていますが、ご了承ください。 どのようにデータを取得しても化け文字で表示されてしまいます。 宜しくお願いします。