プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
ExcelVBA、文字数やバイト数をカウントする
結論から書くと

■文字数
Len(【文字列】)

■バイト数(半角1バイト、全角2バイトとして数える)
LenB(strconv(【文字列】,vbFromUnicode))

です。

こんなサンプルを実行するとφ(--)

str1 = "abc"
str2 = "あいう"
str3 = "あいう123"

Debug.Print ("Len(""" & str1 & """):" & Len(str1))
Debug.Print ("LenB(StrConv(""" & str1 & """,vbFromUnicode)):" & LenB(StrConv(str1, vbFromUnicode)))

Debug.Print ("Len(""" & str2 & """):" & Len(str2))
Debug.Print ("LenB(StrConv(""" & str2 & """,vbFromUnicode)):" & LenB(StrConv(str2, vbFromUnicode)))

Debug.Print ("Len(""" & str3 & """):" & Len(str3))
Debug.Print ("LenB(StrConv(""" & str3 & """,vbFromUnicode)):" & LenB(StrConv(str3, vbFromUnicode)))

こんな結果になりますよφ(--)

Len("abc"):3
LenB(StrConv("abc",vbFromUnicode)):3
Len("あいう"):3
LenB(StrConv("あいう",vbFromUnicode)):6
Len("あいう123"):6
LenB(StrConv("あいう123",vbFromUnicode)):9

補足する必要があるとすれば「LenB()」に「StrConv()」を付けているところでしょうか。

実際のところ、文字のバイト数を取得する関数は

LenB(【文字列】)

です。

ただし、この関数は文字列をUnicodeとして扱います。
半角も全角も2バイト扱いになっちゃうのです。

だから、こんなコードを実行するとφ(--)

str1 = "abc"
str2 = "あいう"
str3 = "あいう123"

Debug.Print ("LenB(""" & str1 & """):" & LenB(str1))
Debug.Print ("LenB(""" & str2 & """):" & LenB(str2))
Debug.Print ("LenB(""" & str3 & """):" & LenB(str3))

こんな結果になりますφ(--)

LenB("abc"):6
LenB("あいう"):6
LenB("あいう123"):12

単に文字数を2倍した値になっていますよね。
半角も全角も2バイトとして数えられています。
慣習的なものではありますが「バイト数」と言ったら、
半角を1バイト、全角を2バイトで数えてもらいたいものです。

というわけで、まずは文字列をUnicodeからANSIに変換してφ(--)

strconv(【文字列】,vbFromUnicode)

それに対してLenBをかますことでバイト数を求めるのですφ(--)

LenB(strconv(【文字列】,vbFromUnicode))

これで半角が1バイト、全角が2バイトとして数えられるようになるので、
「文字列のバイト数」と表現したときに期待する値になります。

ついでなんで書いておくと、ワークシート関数(セルに直接書く関数)を使う場合は

=LENB(【文字列】)

で大丈夫です。
例えば

=LENB("あいう123")

をセルに書くと

9

と表示されますよ。
ワークシート関数の「LENB()」は半角1バイト、全角2バイトとして数えられています。

助かるっちゃー助かるけど、ここら辺の仕様を統一しなくていいのかね(--?
ちょっと疑問は感じるのですが、まぁいいや。

最後にもう一度まとめておくと

■VBA:文字数
Len(【文字列】)

■VBA:バイト数(半角1バイト、全角2バイトとして数える)
LenB(strconv(【文字列】,vbFromUnicode))

■ワークシート関数:文字数
=LEN(【文字列】)

■ワークシート関数:バイト数(半角1バイト、全角2バイトとして数える)
=LENB(【文字列】)

で、文字数と文字列のバイト数を取得できます。

そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:ExcelVBA  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事