Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


25079 / 76732 ←次へ | 前へ→

【56997】Re:セルのデータ(数字、英数字、半角カタカナ)チェック
発言  kanabun  - 08/7/16(水) 21:42 -

引用なし
パスワード
   ▼ひさこ さん:
>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 をさかさまにした
真偽値になっているはずです。
2 hits

【56977】セルのデータ(数字、英数字、半角カタカナ)チェック ひさこ 08/7/15(火) 23:59 質問
【56978】Re:セルのデータ(数字、英数字、半角カタ... kanabun 08/7/16(水) 0:22 発言
【56994】Re:セルのデータ(数字、英数字、半角カタ... ひさこ 08/7/16(水) 20:37 質問
【56995】Re:セルのデータ(数字、英数字、半角カタ... kanabun 08/7/16(水) 20:58 発言
【56996】Re:セルのデータ(数字、英数字、半角カタ... ひさこ 08/7/16(水) 21:25 質問
【56997】Re:セルのデータ(数字、英数字、半角カタ... kanabun 08/7/16(水) 21:42 発言
【56998】Re:セルのデータ(数字、英数字、半角カタ... ひさこ 08/7/16(水) 21:59 お礼

25079 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free