- ベストアンサー
漢字の見分け方
教えて下さい。 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フィールドです。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
いくつかの間違い(勘違い?)がありますね。 「&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 (以下省略) これで十分だと思います。
その他の回答 (1)
- ham_kamo
- ベストアンサー率55% (659/1197)
Hex()は文字コードを16進数の「文字列」に変換する関数なので不要なのでは?Asc(Mid$(work, idx1, 1)) と比較するようにすればいいかと思います。
お礼
ありがとうございます。 勘違いしていたようです。 上手く出来ました。