|
kanabun さん、
早速ありがとうございました!!
奥が深いんですね。。。
とても勉強になりました!!!
また何かありましたら、ご教授のほどよろしくお願いいたします。
▼kanabun さん:
>▼ひさこ さん:
>>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 をさかさまにした
>真偽値になっているはずです。
|
|