2014.
11.
04
21:22:45
結論から書くと
■文字数
■バイト数(半角1バイト、全角2バイトとして数える)
です。
こんなサンプルを実行するとφ(--)
こんな結果になりますよφ(--)
補足する必要があるとすれば「LenB()」に「StrConv()」を付けているところでしょうか。
実際のところ、文字のバイト数を取得する関数は
です。
ただし、この関数は文字列をUnicodeとして扱います。
半角も全角も2バイト扱いになっちゃうのです。
だから、こんなコードを実行するとφ(--)
こんな結果になりますφ(--)
単に文字数を2倍した値になっていますよね。
半角も全角も2バイトとして数えられています。
慣習的なものではありますが「バイト数」と言ったら、
半角を1バイト、全角を2バイトで数えてもらいたいものです。
というわけで、まずは文字列をUnicodeからANSIに変換してφ(--)
それに対してLenBをかますことでバイト数を求めるのですφ(--)
これで半角が1バイト、全角が2バイトとして数えられるようになるので、
「文字列のバイト数」と表現したときに期待する値になります。
ついでなんで書いておくと、ワークシート関数(セルに直接書く関数)を使う場合は
で大丈夫です。
例えば
をセルに書くと
と表示されますよ。
ワークシート関数の「LENB()」は半角1バイト、全角2バイトとして数えられています。
助かるっちゃー助かるけど、ここら辺の仕様を統一しなくていいのかね(--?
ちょっと疑問は感じるのですが、まぁいいや。
最後にもう一度まとめておくと
■VBA:文字数
■VBA:バイト数(半角1バイト、全角2バイトとして数える)
■ワークシート関数:文字数
■ワークシート関数:バイト数(半角1バイト、全角2バイトとして数える)
で、文字数と文字列のバイト数を取得できます。
そんな感じ\(--)/
■文字数
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)))
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("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))
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
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(【文字列】)
で、文字数と文字列のバイト数を取得できます。
そんな感じ\(--)/