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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
EBCDIC⇒SJIS変換の方法
その他(プログラミング・Web制作)
-
VBA バイナリ―から文字列にする方法
Visual Basic(VBA)
-
VBAのバイナリ出力について
Visual Basic(VBA)
-
-
4
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
5
EBCDICをASCIIに変換したい
その他(プログラミング・Web制作)
-
6
byte型をstring型として扱うには
Visual Basic(VBA)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
ACCESS VBA でのバイナリデータ操作について
その他(コンピューター・テクノロジー)
-
9
Excelでバイナリデータを読み込むことはできますか?
Excel(エクセル)
-
10
SQL Server にファイルを登録、取得したいのですが
Visual Basic(VBA)
-
11
16進コード文字列を文字列に変換
Visual Basic(VBA)
-
12
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
13
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルの一部分を抽...
-
ATTファイルってどうやって開け...
-
Zbarというソフトについて
-
STM32 Nucleo-F446REでデータを...
-
テキストファイルを読み込んで...
-
既存のテキストファイルを開く方法
-
エクセルVBAでメールの自動作成...
-
テキストファイル内の文字の有...
-
N88Basic
-
テキストファイルの特定行の削...
-
pngからepsへの変換
-
[VB.NET] 処理の高速化を行いた...
-
Excel VBAが徐々に遅くなる
-
ファイル変換
-
パイソンでのテキストデータの...
-
C#(.Net)におけるエンコード...
-
VB(VBA)で、バイナリデータを使...
-
テキストファイル固定長データ...
-
エクセルのマクロについて教え...
-
accessでクエリをExcelにエクス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
Excel VBAが徐々に遅くなる
-
テキストファイルの一部分を抽...
-
既存のテキストファイルを開く方法
-
StreamReaderで読み込んだファ...
-
テキストファイルってページの...
-
WORDのVBAで差し込み印刷時、デ...
-
[VB.NET] 処理の高速化を行いた...
-
UTF-8とASCIIコードにおける互...
-
テキストファイルの特定行の削...
-
テキストファイル固定長データ...
-
VBA。開いているテキストファイ...
-
VB(VBA)で、バイナリデータを使...
-
C言語のソースからコメントを抜...
-
テキストファイルをSQLServerデ...
-
ファイル変換
-
テキストデータ変換(プログラ...
-
バイナリデータの中からMidのよ...
-
ExcelのVBAコードについて教え...
-
テキストファイル内容の、16進...
おすすめ情報