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