みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

漢字の見分け方

教えて下さい。
VBでMDB上のデータを漢字とそれ以外に分けたいのですが、
S-JISコードの漢字の範囲で判断しているつもりなのですが
上手くいきません。
以下のようなロジックなのですが?
If (Hex(Asc(Mid$(work, idx1, 1))) >= &H8140 And Hex(Asc(Mid$(work, idx1, 1))) <= &H9FFC) Or
(Hex(Asc(Mid$(work, idx1, 1))) >= &HE040 And Hex(Asc(Mid$(work, idx1, 1))) <= &HEFFC) Then

このIF分に引っかからないのですが。
workはMDBのテーブルを読み込んだ1フィールドです。
宜しくお願いします。

投稿日時 - 2006-12-12 17:01:26

QNo.2596628

困ってます

質問者が選んだベストアンサー

いくつかの間違い(勘違い?)がありますね。

「&H8140」は数値の16進数表現ですが・・・
これは、「表示方式」が違うだけで、『数値』としては「-32448」と同じです。
つまり、
> If (Hex(Asc(Mid$(work, idx1, 1))) >= &H8140 And (以下省略)
は、
> If (Hex(Asc(Mid$(work, idx1, 1))) >= -32448 And (以下省略)
こう書いているのと、プログラム的には全く同じです。
また逆に、「Hex関数」と言うのは、『数値』を「16進数表記の文字列」に、
つまり、『数値』では無い物に変数する関数です。

例えば、workの1文字目がShift-JISコードで、「&H8140」の文字だとすると、
> If (Hex(Asc(Mid$(work, idx1, 1))) >= -32448 And (以下省略)
は、さらに、
> If ( "8140" >= -32448 And (以下省略)
と書いたのと同じになります。

コレじゃ何の意味もなしませんよね?

数値か文字列か、どちらかに合わせてください。
例えば、『数値』にあわせるなら、

> If (Asc(Mid$(work, idx1, 1)) >= &H8140 And (以下省略)
これで十分だと思います。

投稿日時 - 2006-12-12 17:50:09

お礼

ありがとうございます。
勘違いしていたようです。
上手く出来ました。

投稿日時 - 2006-12-12 18:27:57

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

Hex()は文字コードを16進数の「文字列」に変換する関数なので不要なのでは?Asc(Mid$(work, idx1, 1)) と比較するようにすればいいかと思います。

投稿日時 - 2006-12-12 17:45:32

あなたにオススメの質問