全角と半角の判断について

解決


ペンギン  2003-11-25 22:55:00  No: 80558  IP: [192.*.*.*]

はじめて利用させていただきます。
早速ですが、ご質問させていただきます。

if [特定の文字列(変数)の30バイト目が全角文字(30,31を跨ぐ文字)だったら]then
    処理
else if [特定の文字列(変数)の30バイト目が半角文字だったら]
    処理
End If

という、全角の時と半角の時で処理を分けたいのですが、どう区別したらいいのか悩んでいます。
スマートにIf文で分けられる良い方法はないでしょうか?

編集 削除
oku  URL  2003-11-26 00:24:44  No: 80559  IP: [192.*.*.*]

1バイト単位で無いとだめですか?
1文字単位なら、
    If LenB(StrConv(Mid$(Text1.Text, 30, 1), vbFromUnicode)) > 1 Then
        MsgBox "全角です"
    End If
LenBで1より大きければ全角!
1バイト単位なら、一度16進数に変換して判断するしか…
1バイトで1文字が表現されるのは、以下の範囲です。
&H00〜&H20、&H80:制御文字(空白やタブや改行などがここに含まれます)
&H21〜&H7Eの範囲:いわゆる英数字  (JIS X 0201 ローマ字)
&HA1〜&HDFの範囲:いわゆる半角カナ(JIS X0201 片仮名)
ここなんかが参考になると思います。
「キャラクターコード」
http://www.infonet.co.jp/ueyama/ip/binary/charcode.html

編集 削除
だい  URL  2003-11-26 08:41:16  No: 80560  IP: [192.*.*.*]

ShiftJISの場合、
全角文字の2バイト目のコードがとりうる範囲は、
1バイトで表現可能な領域とオーバラップしているため
先頭から1バイトずつ判断していかないとうまくいきません。

たとえば、

VBレスキュ-さんの、
http://www.bcap.co.jp/hanafusa/
⇒文字列処理関係
⇒⇒文字列を指定の幅にカット(漢字分断回避) 


http://homepage2.nifty.com/Dee/
⇒VB,VBA,VBS,ACCESS情報屋  Tips 
⇒⇒VisualBasic,VBA関係
⇒⇒⇒文字列をSJIS換算のバイト数で切断出力する関数

編集 削除
nanashi  2003-11-26 11:04:00  No: 80561  IP: [192.*.*.*]

頭から1文字ずつチェックしていって30バイト目がどうなってるかを見れば良いと思います。

編集 削除
ペンギン  2003-11-26 11:36:27  No: 80562  IP: [192.*.*.*]

okuさん、だいさん、nanashiさん、お返事ありがとうございます。

参考にと提示していただいたHPを見たりいろいろと思考してみたのですが、やはり上手くいきません。

「頭から1文字ずつチェックしていって30バイト目がどうなってるか」
という処理をどのように記述すれば、
「文字列のXXバイト目が1バイトかどうか(半角かどうか)」
という判断ができるのでしょうか。

ここがどうしてもわかりません。

編集 削除
nanashi  2003-11-26 11:59:07  No: 80563  IP: [192.*.*.*]

まァこんな感じであってるかなー?

    Dim sBuff$, sData As String
    Dim lCnt As Long
    
    sData = "頭から1文字ずつチェックしていaって30バイト目がどうなってるか"
    lCnt = 1
    
    Do While (lCnt < 30)
        sBuff = Left$(sData, 1)
        sData = Mid$(sData, 2)
        
        lCnt = lCnt + LenB(StrConv(sBuff, vbFromUnicode))
    Loop
    
    If lCnt = 30 Then
        sBuff = Left$(sData, 1)
        
        If LenB(StrConv(sBuff, vbFromUnicode)) = 2 Then
            Debug.Print "全角"
        Else
            Debug.Print "半角"
        End If
    Else
        Debug.Print "全角文字の2Byte目"
    End If


もっと良いやり方が分かる方、フォローお願いします。

編集 削除
ペンギン  2003-11-26 14:26:05  No: 80564  IP: [192.*.*.*]

nanashiさん、再度のお返事ありがとうございます。

無事に判別をつけることができるようになりました。
本当にありがとうございました。

編集 削除