2011年12月09日 スタッフブログ 平川 開発
こんばんは。平川です。
今回はSEらしくプログラムの話でも。
というか、ただの備忘録ですが…
VB6やVBAには文字数をカウントする手段として
[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
いつも使い方を忘れてしまうので、忘れたときは
このブログを見ることにします。
ではでは