|
▼ひさこ さん:
>kanabun さん、お世話になっております。
>
>結果は、
>aiueo 5 5 TRUE
>aiueお 5 6 FALSE
>あいうえお 5 10 FALSE
>
>のようになりました。
>
>私の理解した範囲での解釈は、文字数とバイト数が倍になったら
>すべて全角が入力されている。。。(全角は2バイトの為)
>
>どうでしょうか?
はい。それで正解です。
B列: LEN関数は 文字数を返します
C列: LENB関数は バイト数を返します
で、
D列の式: 文字数とバイト数が違っていたら(文字数よりバイト数のほうが大きかったら)
D列は<FALSE> になり、A列文字列には2バイトコードが含まれていることを示します。
これをまとめて、VBA(=ユーザー定義関数)にすればいいのですが、
ワークシート上とVBA上とで 使用している文字コード体系がちがうので、
ワークシートのセルの ShiftJIS文字列「123」のLENBの結果は 3ですが、
VBA上では 「123」というUnicode文字列を LenB関数にかけても 6 となります。
VBA上では すべての(半角であれ、全角であれ)文字は2バイトです。
これを、シート上の文字のように 半角の時は 1バイトを得られるようにするには
Unicode文字列を一時的にShiftJISコードに変換して LenB関数でバイト数を
取得します。
具体的には、以下のような関数となります
Function 全角あり(ByVal c As Range) As Boolean
Dim ss As String
ss = c.Text
全角あり = Len(ss) < LenB(StrConv(ss, vbFromUnicode))
End Function
この関数は 全角文字が含まれているとき、True を返します。
この関数を、E列に
=全角あり(A1)
のように埋め込むと、結果は ちょうど D列の TRUE/FALSE をさかさまにした
真偽値になっているはずです。
|
|