テスト用S-JIS文字列(改行付き)の作成
2024/08/02
----------------------
ーーーーーーーーーーーーーーーーー
【 MS Learningより引用 】VBA
Chr(charcode)
ChrB(charcode)
ChrW(charcode)
Chr(10) は改行文字を返します。
文字コードの通常の範囲は 0から255。
注意:
ChrB関数は、Stringに含まれるバイトデータの場合に使用。
ChrBは、常に1バイトを返す。
ChrW関数は、Unicode文字を含むStringを返す。
Dim MyChar
MyChar = Chr(65) ' Returns A.
MyChar = Chr(97) ' Returns a.
MyChar = Chr(62) ' Returns >.
MyChar = Chr(37) ' Returns %.
ーーーーーーーーーーーーーーーーー
テスト用S-JIS文字列の最後に「改行」を付ける試行錯誤。
とりあえず、EXCEL 2019の VBA でやってみた。
-----------------------
Begin
Dim Str As String
Dim Str2 As String
Dim Str3 As String ' 改行コード付き
Str = "ab123"
' Unicode文字列 10バイト
MsgBox Str & "バイト数" & LenB(Str)
Str2 = StrConv(Str, vbFromUnicode)
' S-JIS文字列にした 長さ 8バイト
MsgBox Str2 & "バイト数" & LenB(Str2)
' 8バイト [長さ 8バイト]
--ここからしばらく悪戦苦闘が、、、--------------
'
Str3 = Str2 & vbCrLf
' 行末に改行コードを加えたはずだが。
' S-JIS文字列
MsgBox "+ vbCrLf バイト数" & LenB(Str3)
' 12バイト (4バイトも増えた)
'
Str3 = Str2 & &H0D & &H0A
MsgBox "+ &H0D & &H0A バイト数" & LenB(Str3)
' 16バイト (8バイトも増えた)
' 試しに、Str3を 改行 だけにしてみる。
Str3 = &H0D & &H0A
MsgBox "&H0D & &H0A バイト数" & LenB(Str3)
' 8バイト
'
Str3 = vbCrLf
MsgBox "vbCrLf バイト数" & LenB(Str3)
' 4バイト
1バイトずつ読み取ってみる、以下同様
' 1バイト目
MsgBox MidB(Str3, 1, 1) ' ""
MsgBox AscB( MidB(Str3, 1, 1) ) ' "13" は〇。
' 2バイト目
MsgBox MidB(Str3, 2, 1) ' ""
MsgBox AscB( MidB(Str3, 2, 1) ) ' "0" は〇。
' 3バイト目
MsgBox MidB(Str3, 3, 1) ' 3"
MsgBox AscB( MidB(Str3, 3, 1) ) ' "10" は〇。
' 4バイト目
MsgBox MidB(Str3, 4, 1) ' ""
MsgBox AscB( MidB(Str3, 4, 1) ) ' "0" は〇。
' Unicode文字列 で &H0D &H0A
' 試しに、&H0D、 だけにしてみる。
Str3 = &H0D
MsgBox "&H0D バイト数" & LenB(Str3)
' 4バイト
1バイトずつ読み取ってみる、以下同様
' 1バイト目
MsgBox MidB(Str3, 1, 1) ' "1"
MsgBox AscB( MidB(Str3, 1, 1) ) ' "49" は〇。
' 2バイト目
MsgBox MidB(Str3, 2, 1) ' ""
MsgBox AscB( MidB(Str3, 2, 1) ) ' "0" は〇。
' 3バイト目
MsgBox MidB(Str3, 3, 1) ' 3"
MsgBox AscB( MidB(Str3, 3, 1) ) ' "51" は〇。
' 4バイト目
MsgBox MidB(Str3, 4, 1) ' ""
MsgBox AscB( MidB(Str3, 4, 1) ) ' "0" は〇。
' Unicode文字列 で "1" "3"
Str3 =StrConv( &H0D, vbFromUnicode)
' S-JIS文字列にしたつもり
MsgBox "&H0D SJIS バイト数" & LenB(Str3)
' 2バイト それでも2バイトある!
1バイトずつ読み取ってみる、以下同様
' 1バイト目
MsgBox MidB(Str3, 1, 1) ' "1"
MsgBox AscB( MidB(Str3, 1, 1) ) ' "49" は〇。
' 2バイト目
MsgBox MidB(Str3, 2, 1) ' 3""
MsgBox AscB( MidB(Str3, 2, 1) ) ' "51" は〇。
' 試しに、&H0A、 だけにしてみる。
Str3 = &H0A
MsgBox "&H0A バイト数 " & LenB(Str3)
' 4(バイト)
vbCrLf、 &H0A、&H0Aを加えたのが間違いらしい。
それとUNICODE文字として扱われてしまうらしい。
-----------------------------------
以下、1バイトの「文字」にすることを考える。
-----------------------------------
Chr()で変換してみる
Str3 = Chr(&H36)
MsgBox Str3 & " バイト数=" & LenB(Str3)
' 6 2(バイト)
MsgBox MidB(Str3, 1, 1) ' "6"
MsgBox AscB( MidB(Str3, 1, 1) ) ' "54" は〇。
MsgBox MidB(Str3, 1, 2) ' "6"
MsgBox AscB( MidB(Str3, 1, 2) ) ' "54" は〇。
UNICODEで入っている。
MsgBox MidB(Str3, 2, 1) ' ""
MsgBox AscB( MidB(Str3, 2, 1) ) ' "0" 。
-----------------------------------
Str3 = Chr(10)
MsgBox Str3 & " バイト数=" & LenB(Str3)
' "" 2(バイト)
MsgBox MidB(Str3, 1, 1) ' ""
MsgBox AscB(MidB(Str3, 1, 1)) ' "10" は〇。
MsgBox MidB(Str3, 1, 2) ' ""
MsgBox AscB(MidB(Str3, 1, 2)) ' "10" は〇。
'2バイト目は?
MsgBox "2バイト目は?"
MsgBox MidB(Str3, 2, 1) ' ""
MsgBox AscB(MidB(Str3, 2, 1)) ' "0" は〇。
-----------------------------
Chr では2バイトになってしまう!
-----------------------------
-------以下 ChrB を使う----------------------
Str3 = ChrB(10)
MsgBox Str3 & " バイト数=" & LenB(Str3)
' Str3(と次のバイト数) が表示おかしいけれど、、
MsgBox " バイト数=" & LenB(Str3)' 1 バイト
MsgBox MidB(Str3, 1, 1) ' ""
MsgBox AscB(MidB(Str3, 1, 1)) ' "10" は〇。
明かりが見えてきた!
---------------------------
Str3 = ChrB(13)
MsgBox Str3 ' & " バイト数=" & LenB(Str3)
MsgBox " バイト数=" & LenB(Str3)' 1 バイト
MsgBox MidB(Str3, 1, 1) ' ""
MsgBox AscB(MidB(Str3, 1, 1)) ' "13" は〇。
---------------------------
Str3 = ChrB(&H0D) 同じ結果。
MsgBox Str3 ' & " バイト数=" & LenB(Str3)
MsgBox " バイト数=" & LenB(Str3)' 1 バイト
MsgBox MidB(Str3, 1, 1) ' ""
MsgBox AscB(MidB(Str3, 1, 1)) ' "13" は〇。
-------------------------
Str3 = ChrB(65)
MsgBox Str3 ' & " バイト数=" & LenB(Str3)
MsgBox " バイト数=" & LenB(Str3) ' 1 バイト
MsgBox MidB(Str3, 1, 1) ' "A"
MsgBox AscB(MidB(Str3, 1, 1)) ' 65 は〇。
-------------------------
〇〇〇これでやっと改行コードになった。めでたしめでたし。
Str3 = ChrB(&HD) & ChrB(&HA)
MsgBox Str3 & " バイト数=" & LenB(Str3)
' "?" 2 バイト
' ?表示は、内容を文字コードとして判別不能なのだろう。
MsgBox " バイト数=" & LenB(Str3) ' 2 バイト
MsgBox MidB(Str3, 1, 1) ' ""
MsgBox AscB(MidB(Str3, 1, 1)) ' 13 は〇。
'2バイト目は?
MsgBox "2バイト目は?"
MsgBox MidB(Str3, 2, 1) ' ""
MsgBox AscB(MidB(Str3, 2, 1)) ' 10 は〇。
-------------------------
おまけに文字を入れてみた。
Str3 = ChrB(65) & ChrB(52) '"A" "4"
MsgBox Str3 & " バイト数=" & LenB(Str3)
' "?" 2 バイト
' ?表示は、内容を文字コードとして判別不能なのだろう。
MsgBox " バイト数=" & LenB(Str3) ' 2 バイト
MsgBox MidB(Str3, 1, 1) ' "A"
MsgBox AscB(MidB(Str3, 1, 1)) ' 65 は〇。
'2バイト目は?
MsgBox "2バイト目は?"
MsgBox MidB(Str3, 2, 1) ' "4"
MsgBox AscB(MidB(Str3, 2, 1)) ' 52 は〇。
-------------------------
これで本番。
Str3 = Str2 & ChrB(&HD) & ChrB(&HA)
' 行末に改行コードを加えたつもり。
MsgBox Str3 & " バイト数=" & LenB(Str3)
MsgBox MidB(Str3, 1, 1) ' "a"
MsgBox MidB(Str3, 2, 1) ' "b"
'3文字目 「1」 第1と第2に分ける。
' 1バイト目
MsgBox " 1バイト目"
MsgBox MidB(Str3, 3, 1) ' " "?
MsgBox AscB( MidB(Str3, 3, 1) ) ' 130
MsgBox "&H" & Hex(AscB( MidB(Str3, 3, 1) ) ) ' &H82
' 2バイト目
MsgBox MidB(Str3, 4, 1) ' " "P
MsgBox AscB( MidB(Str3, 4, 1) ) ' 80
MsgBox "&H" & Hex(AscB( MidB(Str3, 4, 1) ) ) ' &H50
'「1」のS-JISコードは 0x8250(Hex)、
'4文字目 「2」
' 1バイト目
MsgBox " 1バイト目"
MsgBox MidB(Str3, 5, 1) ' "?"
MsgBox AscB( MidB(Str3, 5, 1) ) ' 130
MsgBox "&H" & Hex(AscB( MidB(Str3, 5, 1) ) ) ' &H82
' 2バイト目
MsgBox MidB(Str3, 6, 1) ' "Q"
MsgBox AscB( MidB(Str3, 6, 1) ) ' 81
MsgBox "&H" & Hex(AscB( MidB(Str3, 6, 1) ) ) ' &H51
'「2」のS-JISコードは 0x8251(Hex)、
'5文字目 「3」
' 1バイト目
MsgBox " 1バイト目"
MsgBox MidB(Str3, 7, 1) ' "?"
MsgBox AscB( MidB(Str3, 7, 1) ) ' 130
MsgBox "&H" & Hex(AscB( MidB(Str3, 7, 1) ) ) ' &H82
' 2バイト目
MsgBox MidB(Str3, 8, 1) ' "R"
MsgBox AscB( MidB(Str3, 8, 1) ) ' 82
MsgBox "&H" & Hex(AscB( MidB(Str3, 8, 1) ) ) ' &H52
'「3」のS-JISコードは 0x8252(Hex)、
MsgBox " 9バイト目は"
MsgBox MidB(Str3, 9, 1) ' ""
MsgBox AscB(MidB(Str3, 9, 1)) ' 13 は〇。
'2バイト目は?
MsgBox "10バイト目は?"
MsgBox MidB(Str3, 10, 1) ' ""
MsgBox AscB(MidB(Str3, 10, 1)) ' 10 は〇。
行末にCrLFが付いたこと、確認できた。
----------------------------------
#テキストエディター
#エディター
冷やかしの「いいね」は断ります!