
VB(VBA)で、バイナリデータを使ってテキストファイルを作成したいのですが、
例えば、"A"が一文字のみのShift-JIS もしくはunicodeのテキストファイルを作るため、
(下記の確認はShift-jis で行っています。)
Dim ByteData As Byte
ByteData = AscW("A")
Open "C:\A.txt" For Binary Access Write As #1
Put #1, 1, ByteData
Close #1
としました。
できあがったファイルをバイナリエディタで確認すると、
41
となっています。
(Unicode は 41 00 2バイト文字でリトルエンディアンのため)
この41は、"A" の文字コード(Shift-JIS)「65」の16進表記です。
この「41」という値を使ってバイナリモードでテキストファイルを作成したいのですが、
どのようにすればよいでしょうか?
上記
Put #1, 1, ByteData
の部分を、
1.Put #1, 1, 41
としたところ、通常表示はできないファイルができあがったみたいです。
バイナリモードで 「29 00 20 20」でした。
文字コード00 に該当する文字がないためだと思います。
2.Put #1, 1, "41"
としたところ、「41 」(バイナリモードで 「34 31 20 20」)
(41の後ろは半角空白)
で×でした。
3.Put #1, 1, CLng("&H" & 41)
としたところ、通常表示はできないファイルができあがったみたいです。
バイナリモードで 「41 00 00 00」でした。
4.ByteData = CLng("&H" & 41)
Put #1, 1, ByteData
これでやっとできました。
この他にも方法があるのか?と思い、質問させていただきました。
ご指導よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
1バイトしか出力していないから。
ReDim ByteData(1) As Byte
ByteData(0) = AscW("A")
Open "C:\A.txt" For Binary Access Write As #1
Put #1, , ByteData
このように要素数2の配列を出力すれば良い。
と言うか、コード変換はStreamオブジェクトを使うべきです。
Dim S, U
Set S = CreateObject("ADODB.Stream")
S.Open
S.Type = 2 '★テキストモード
S.Charset = "Shift_JIS" '★SHIFT-JIS
S.WriteText "A" '★文字列を書き込む
Set U = CreateObject("ADODB.Stream")
U.Open
U.Type = 2
U.Charset = "UniCode"
S.Position = 0 '★ファイル位置を先頭に戻しておく
S.CopyTo U '★コード変換する
U.SaveToFile "C:\OK\U.txt", 2 '★ファイルに保存
S.Close
U.Close
出力ファイルの先頭には文字コードを示すBOM(2バイト)が付加されます。
これがイヤなら、次のようにBOMを避けて、自分のデータに読み込み、
これを出力します。
S.CopyTo U '★コード変換する(ここまで同じ)
U.Position = 0 '★先頭に戻す
U.Type = 1 '★バイナリモード
ReDim B(U.Size - 1) As Byte '★全データ長を定義
U.Position = 2 '★BOMを避けて3バイト目へ位置付ける
B = U.Read '★全データをバイト配列へ読み込む
Open "C:\A.txt" For Binary Access Write As #1
Put #1, , B '★ファイルへの書き込み
Close #1
UniCodeの他、UTF-8など、登録されている文字コードなら相互に
変換することができます。
No.1
- 回答日時:
' ByteData は Byte型 (1 Byte)
Dim ByteData As Byte
' Unicode 文字セットの "A" を Byte型(1 Byte)にセット
' A は ASCIIコードで &h41 (10進で 65)
ByteData = AscW("A")
' ファイルをバイナリファイルの書込みモードでオープン
Open "C:\A.txt" For Binary Access Write As #1
'ファイルの1バイト目に Byte型(1 Byte)の値をセット
'バイナリエディタで見ると 41 と見える
'(バイナリエディタが 16進表記の為)
'当然 "J" だった場合、4A と見える
Put #1, 1, ByteData
'ファイルの1バイト目に Integer型(2 Byte)で 10進数の
'41 をセット、 41の16進は、&h29 で、integer型の為
'バイナリエディタで見ると [29 00]が入る
'[29 00 20 20]になったとなるのなら、先にA.txtを削除して
'確認すること(前の情報が残っていると思われる)
'当然ながら、先の"J"の場合の、4A はエラーになる
Put #1, 1, 41
'ファイルの1バイト目に char型で 2文字 "41"をセット
'文字の 4 は ASCIIコードで &h34 (10進 で 52)
'文字の 1 は ASCIIコードで &h31 (10進 で 49)
'バイナリエディタで見ると [34 31]が入る
'[34 31 20 20]になったとなるのなら、先にA.txtを削除して
'確認すること(前の情報が残っていると思われる)
Put #1, 1, "41"
'ファイルの1バイト目に long型(4 Byte)で (CLng で long型に変換した為)
'で、&h41 をセット、long型の為 [41 00 00 00] が入る
'当然ながら、CLng("&H" & 4A) とするとエラー CLng("&H4A")ならOK
Put #1, 1, CLng("&H" & 41)
'Byte型(1 Byte) の変数に、long型( 4 Byte )の値をセット
'その後、1Byte を書き込む
'当然ながら、CLng("&H" & 4A) とするとエラー CLng("&H4A")ならOK
ByteData = CLng("&H" & 41)
Put #1, 1, ByteData
'ファイルクローズ
Close #1
最後のやり方のように、Byte型に格納して書き込むやり方で良いと思いますが
Chr$ で 1文字に変換してセットで良いかも知れません
Put #1, 1, Chr$(CInt("&H" & 41))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- ホームページ作成・プログラミング Adobe DreamweaverでのサイトのFTP 2 2023/03/05 11:55
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA バイナリ―から文字列にする方法
Visual Basic(VBA)
-
EBCDIC⇒SJIS変換の方法
その他(プログラミング・Web制作)
-
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
-
4
ACCESS VBA でのバイナリデータ操作について
その他(コンピューター・テクノロジー)
-
5
VBAのバイナリ出力について
Visual Basic(VBA)
-
6
バイト型のデータを16進表記でファイルに書き込むには?
Visual Basic(VBA)
-
7
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
8
16進数の変換処理
Visual Basic(VBA)
-
9
バイナリデータの中からMidのように指定範囲を取得したい
Visual Basic(VBA)
-
10
文字列をバイナリデータとして読み込む方法
Visual Basic(VBA)
-
11
byte型をstring型として扱うには
Visual Basic(VBA)
-
12
文字列からタブコードを取り除きたい
Visual Basic(VBA)
-
13
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
14
16進の10進変換について
Visual Basic(VBA)
-
15
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
16
数値のパック10進数の変換について(vb6)
Visual Basic(VBA)
-
17
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
18
ExcelVBA バイナリファイルの全半角の判断
Excel(エクセル)
-
19
Excelでバイナリデータを処理するには?
Excel(エクセル)
-
20
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba セルの4辺について罫線が有...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
【ExcelVBA】5万行以上のデー...
-
Vba FileSystemObject オブジェ...
-
VBA 入力箇所指定方法
-
【ExcelVBA】値を変更しながら...
-
[VB.net] ボタン(Flat)のEnable...
-
Excel(M365) Vlookup/セル反転(...
-
【ExcelVBA】値を変更しながら...
-
ダブルクリックで貼り付けた画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
テキストファイル固定長データ...
-
VB(VBA)で、バイナリデータを使...
-
バイナリデータの中からMidのよ...
-
WORDのVBAで差し込み印刷時、デ...
-
Excel VBAが徐々に遅くなる
-
既存のテキストファイルを開く方法
-
C言語のソースからコメントを抜...
-
VBSでテキストファイルの2行目...
-
エクセルVBAでメールの自動作成...
-
wav ファイルから音声を数値デ...
-
ファイル変換
-
テキストファイル(英語&日本...
-
[VB.NET] 処理の高速化を行いた...
-
テキストファイルをSQLServerデ...
-
VBA。開いているテキストファイ...
-
テキストファイルの特定行の削...
-
VBscriptでWebサイトから取得し...
-
テキストファイルを読んで、Exc...
おすすめ情報