- ベストアンサー
VBAのバイナリ出力について
- VBAを使ってエクセルのバイナリファイルを出力する方法について悩んでいます。
- 具体的には、DEC2HEXを使って生成した512文字のデータをバイナリファイルとして保存したいです。
- 現在はテキストファイルに書き出す方法を試していますが、正しいバイナリ形式にするためのプログラムがわかりません。
- みんなの回答 (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"は事前に削除した方が安全です。 例えばファイルの大きさが小さくなると、前のファイルの大きさがに維持されてしまいます。 ご注意ください。 ご確認下さい。
その他の回答 (1)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
Binaryモードでオープンして、Putで書き込む。 そこまで判っているなら、なぜヘルプを見ない?(F1キーの使い方を知らない?) VBAのヘルプから抜粋。(使用例はバイナリファイルに変更) Put ステートメント 変数の内容をディスク上のファイルに書き込むファイル入出力ステートメントです。 ◎構文 Put [#]filenumber, [recnumber], varname filenumber: 必ず指定します。任意のファイル番号を指定します。 recnumber: 省略可能です。書き込みを行うレコード番号 (ランダム アクセス ファイル) または バイト位置 (バイナリ ファイル) を指定します。 varname: 必ず指定します。ディスクに書き込むデータが格納されている変数の名前を指定します。 ◎解説 通常、Put ステートメントを使用して書き込んだデータは、Get ステートメントで読み込みます。 引数 recnumber には、ファイル内の先頭のレコード番号またはバイト位置には 1 を、2 番目のレコード番号またはバイト位置には 2 を指定します。以下同様に続きます。引数 recnumber を省略すると、最後に呼び出した Get ステートメントまたは Put ステートメント、あるいは最後に呼び出した Seek 関数が示す位置の次のレコードまたはバイトが読み込まれます。次に示すように引数 recnumber を省略する場合でも、各指定項目を区切るカンマは省略できません。 Put #4,,FileBuffer ◎Put ステートメントの使用例 次の例は、Put ステートメントを使って、データをファイルに書き込みます。この例では、ユーザー定義の Record 型の 5 つのレコードをファイルに書き込みます。 Dim myData(99) As Byte ' 変数を宣言します。 For I=0 To 99 myData(I) = I Next I ' ファイルをバイナリ アクセス モードで開きます。 Open "TESTFILE.dat" For Binary As #1 Put #1, , myData ' データをファイルに書き込みます。 Close #1 ' ファイルを閉じます。
お礼
ご回答ありがとうございます。 正直、“型”や“引数”もよく理解できていないので 勉強したいと思います。 ご教授ありがとうございました。
お礼
jcctairaさん、ご回答ありがとうございます。 やってみたところ、できました! 自分でも、このソースを見てどうやっているのか 勉強したいと思います。 ありがとうございました!