| 
    
     |  | 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 をさかさまにした
 >真偽値になっているはずです。
 
 |  |