はじめまして、vbクリップです。
早速宜しくお願いします。
例えば、"も字れつ" とある中に「字」が漢字だという
判断方法と言うのはあるんでしょうか?
宜しくお願いします。
えっと、ゴメン略式で回答します。
余りスマートなやり方ではないですが
ひらがな、あ〜んの文字コードは?
カタカナ、ア〜ンの文字コードは?
数値、0〜9の文字コードは?
アルファベットa〜z、A〜Zの文字コードは?
(あと半角もかな)
それ以外!
こんなのは、
Sub test()
Dim strtmp As String
Dim i As Long
strtmp = "も字れつモジレツmojiretu漢字"
strtmp = StrConv(strtmp, vbKatakana)
strtmp = StrConv(strtmp, vbNarrow)
Debug.Print strtmp
For i = 1 To Len(strtmp)
If StrConv(Mid$(strtmp, i, 1), vbWide) = Mid$(strtmp, i, 1) Then
Debug.Print i & "文字目は漢字", Chr(34) & Mid$(strtmp, i, 1) & Chr(34)
End If
Next i
End Sub
いなさん papaさん 早速のレスありがとうございます。
papaさんの方法は考えもつきませんでした。すばらしい。
しかし、全角の記号がある場合にそれも漢字と認識してしまいます。
一番確実なのは、漢字の文字コードからチェックしたほうがいいんでしょうか?
しかし、漢字の文字コードの範囲や文字コードの変換方法が解りません。
宜しくおねがいします。
> しかし、全角の記号がある場合にそれも漢字と認識してしまいます。
う〜ん、なかなか奥が深い
では、
http://crocro.com/pc/write/hide/chimarl09_02.html
を参考にさせていただきました
1バイト目のチェックのみで良さそうですが?
Sub test()
Dim strtmp As String
Dim byttemp() As Byte
Dim i As Long
strtmp = "も字れつモジレツmojiretu漢字□●"
strtmp = StrConv(strtmp, vbKatakana)
strtmp = StrConv(strtmp, vbNarrow)
Debug.Print strtmp
For i = 1 To Len(strtmp)
If StrConv(Mid$(strtmp, i, 1), vbWide) = Mid$(strtmp, i, 1) Then
byttemp = StrConv(Mid$(strtmp, i, 1), vbFromUnicode)
If Hex(byttemp(0)) & Hex(byttemp(1)) >= "8040" And Hex(byttemp(0)) & Hex(byttemp(1)) <= "879F" Then
Debug.Print i & "文字目は記号", Chr(34) & Mid$(strtmp, i, 1) & Chr(34)
Else
Debug.Print i & "文字目は漢字", Chr(34) & Mid$(strtmp, i, 1) & Chr(34)
End If
End If
Next i
End Sub
papaさん レスありがとうございます。
おかげで、希望通りの動作をすることができました。
ありがとうございました。
しかし、Hex文字列をそのまま等号式で比較できるんですね。
大変勉強になりました。
ツイート | ![]() |