外字の有無をチェックするユーザー定義関数

Pocket

もう2015年だというのにWindowsで「外字」を使ったデータに遭遇しました。
標準で使える文字に置き換える、もしくは文字を画像として作るのが定番となって久しいと思っていたので、驚きました。
ともあれ、外字の有無をチェックする必要が生じたので、ユーザー定義関数を作ってみました。

シフトJISの場合、16進で0xF000-0xFFFCが外字の領域になります。
VBAにはAscという関数があり、文字列の先頭のコードを返します。このコードはシフトJISのコードと比べると、外字の領域を含む範囲では、ちょうど0x10000の分だけ少ないので、これを利用します。

Function is_gaiji(text As String) As Boolean
    '外字を含む文字列の場合、TRUEを返す。
    'シフトJISの場合、0xF000-0xFFFCが外字の領域。
    'シフトJISのコードとVBAのAscが返すコードの差は0x10000。
    Dim asc_start As Long
    Dim asc_end As Long
    Dim len_text As Long
    Dim i As Long
    Dim t As String
    Dim a As Long
   
    asc_start = CLng("&hF000") - CLng("&h10000")
    asc_end = CLng("&hFFFC") - CLng("&h10000")
   
    len_text = Len(text)
   
    is_gaiji = False
    For i = 1 To len_text
        t = Mid(text, i, 1)
        a = Asc(t)
        If asc_start <= a And a <= asc_end Then
            is_gaiji = True
        End If
    Next i
End Function

Excel2013で確認しましたが、充分なデバッグをしていませんし、環境によっても違うかもしれませんので、ご利用にあたっては自己責任ということでお願いします。

[ 2015年11月12日 | カテゴリー: Excel | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報