Excel VBA質問箱 IV

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

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


25078 / 76732 ←次へ | 前へ→

【56998】Re:セルのデータ(数字、英数字、半角カタカナ)チェック
お礼  ひさこ  - 08/7/16(水) 21:59 -

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

0 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 お礼

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