VB6・VBAメモ:全角半角混在文字列のバイト数

文字列のバイト数を取得したい場合、どのようにすれば良いでしょうか?
まず思い浮かぶのは文字列のバイト数を取得するLenB()を使用する方法だと思います。

しかし実際に「LenB("abc")」のように実行してみると、
文字数×2の「6」という値が返ってきてしまうかと思います。
(※VB6より前のバージョンでは3と返ってくるそうです。)

これはVB6の内部コードがUnicodeであるため、
全ての文字が2バイトとして扱っているからだそうです。

しかし英数字は1バイト、日本語は2バイトのように計算したいこともあるかと思います。
以下に全角と半角が混在した文字列のバイト数の取得方法の例です。


Dim wStrU   As String, wStrS   As String
Dim wByteU  As Long  , wByteS  As Long

'Unicodeの文字列
wStrU = "aいu"

'UnicodeをShift-JISに変換
wStrS =StrConv(wStrU, vbFromUnicode)
wByteS = LenB(wStrS)	'バイト数->3

英数字を1バイト、日本語を2バイトのようにしてバイト数を取得するには
上記のようにUniCodeをShift-JISに変換すると実現することができます。

「StrConv(○○○, vbFromUnicode)」でShift-JISへの変換を行っています。

Shift-JISに変換した文字列は、ほとんどの場合はそのまま使用できないので注意して下さい。
テキストボックス等にShift-JISの値を入れても文字化けするはずです。
なお、Unicode/Shift-JIS、Len()/LenB()でそれぞれ出力すると以下のようになります。


Dim wStrU   As String
Dim wByteU  As Long
Dim wLenU   As Long

'Unicodeの文字列
wStrU = "aいuえo"

wByteU = Len(wStrU)	'文字数->5
wLenU  = LenB(wStrU)	'バイト数->10
'--------------------------------------------
Dim wStrS   As String
Dim wByteS  As Long
Dim wLenS   As Long

'UnicodeをShift-JISに変換
wStrS  =StrConv(wStrU, vbFromUnicode)

wByteS = Len(wStrS)	'文字数->3(※Shift-JISの場合、文字数は正常にカウントできません。)
wLenS  = LenB(wStrS)	'バイト数->7


コメント
コメントする








    
この記事のトラックバックURL
トラックバック