スタッフブログ

文字数をカウントしたい場合は…

2011年12月09日 スタッフブログ 平川 開発 

こんばんは。平川です。

今回はSEらしくプログラムの話でも。
というか、ただの備忘録ですが…

VB6やVBAには文字数をカウントする手段として
[Len] や [LenB] といった関数が用意されています。

[Len] は全角半角の区別なく、[LenB] は全角半角を
区別して文字数をカウントするのに使用しますが、
これがまた曖昧で、普通に使うだけでは期待した
結果が戻ってこないということがよくあります。

この例では、戻り値はそれぞれ以下のようになります。
でも、 [9(バイト)] という結果が欲しい場合があるのです。

Debug.Print Len(“あいう123”) ‘←戻り値は [6] Debug.Print LenB(“あいう123”) ‘←戻り値は [12]

バイト数を求めたい場合は以下のように記述します。

Debug.Print LenB(StrConv(“123”, vbFromUnicode))  ‘←戻り値は [3] Debug.Print LenB(StrConv(“あいう”, vbFromUnicode)) ‘←戻り値は [6] Debug.Print LenB(StrConv(“あいう123”, vbFromUnicode)) ‘←戻り値は [9]

なぜかというと、VB6やVBAの処理ではすべて [Unicode] として扱われ、
このUnicodeが半角文字まで2バイトとして扱ってしまうからだそうです。
そこで、[vbFromUnicode] オプションを使って 既定のコード形式[ANSI]に
変換する必要あるということらしいです。

伝票入力画面で「半角は1バイト、全角は2バイト扱いで、計○○バイト以上の入力を禁止したい」
といった場合などに使えますよね。

↓こんな感じで関数化すると便利です。
Public Function P_LenB_GET(ByVal varValue As Variant) As Long

    If Nz(varValue, “”) = “” Then
        P_LenB_GET = 0
        Exit Function
    End If
 
    P_LenB_GET = LenB(StrConv(varValue, vbFromUnicode))
 
End Function

いつも使い方を忘れてしまうので、忘れたときは
このブログを見ることにします。

ではでは