[[20050808102534]] 『シフトJIS第3・4水準文字を調べたい。』(かな) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シフトJIS第3・4水準文字を調べたい。』(かな)

文章内にどれだけシフトJIS第3・4水準文字があるのか調べたいと思っています。

たとえば、A列に旧漢字を使って書かれた明治時代の小説のデータが入力されています。unikodeテキストに対応していない可能性がある相手にデータを渡す時に、文字化けの可能性がある文字を予めチェックして起きたいのです。

ExcelのマクロでA列の文章からシフトJIS第3・4水準文字を判定し、その文字をB列に抜き出すことはできますか?
逆に、A列の文章の中からシフトJIS第1・2水準の漢字やひらがな、記号等を全部削除して第3・4水準文字だけ残すといった作業は可能でしょうか?

もし可能ならご教授よろしくお願います。


 以下のコードを標準モジュールにペッタリ貼り付けて、
B1セルに =GetOtherString(A1) と書いて、必要な行までフィルドラッグしてください。
B列にシフトJIS第1・2水準の漢字やひらがな、記号等を除いた文字列が表示されます。
あるいは
B1セルに =GetOtherString(A1:A100) 等、A列の範囲を指定してください。
B1セルにシフトJIS第1・2水準の漢字やひらがな、記号等を除いた文字列が表示されます。
多分ね。
Option Explicit
'--------------------------------------------------------------------------------
Function GetOtherString(ByVal Target As Range) As String
    Dim intIdx As Integer
    Dim strWk As String
    Dim Ret As String
    Dim r As Range
    Ret = ""
    For Each r In Target
        For intIdx = 1 To Len(r.Value)
            strWk = Mid(r.Value, intIdx, 1)
            If IsOtherChar(strWk) Then
                Ret = Ret & strWk
            End If
        Next
    Next
    GetOtherString = Ret
End Function
'--------------------------------------------------------------------------------
Public Function IsOtherChar(ByVal strTarget As String) As Boolean
    Dim bytWk() As Byte
    Dim blnFlg As Boolean
    IsOtherChar = False
    blnFlg = False
    If strTarget = "?" Then                                                         '本当の?と区別の為
    Else
        Erase bytWk
        bytWk = StrConv(strTarget, vbFromUnicode)
        If UBound(bytWk) < 1 Then                                                   '1Byte文字
            If bytWk(0) = &H3F Then                                                 'JIS範囲外文字
                blnFlg = True
            End If
        Else                                                                        '2Byte文字
            If bytWk(1) >= &H0 And bytWk(1) <= &H3F Then                            '不明
                blnFlg = True
            ElseIf bytWk(1) = &H7F Then                                             '不明
                blnFlg = True
            ElseIf bytWk(1) >= &HFD And bytWk(1) <= &HFF Then                       '不明
                blnFlg = True
            ElseIf bytWk(0) = &H81 Then                                             '全角文字(特殊記号)
            ElseIf bytWk(0) = &H82 And bytWk(1) >= &H4F And bytWk(1) <= &H58 Then   '全角文字(数字)
            ElseIf bytWk(0) = &H82 And bytWk(1) >= &H60 And bytWk(1) <= &H79 Then   '全角文字(英字大文字)
            ElseIf bytWk(0) = &H82 And bytWk(1) >= &H81 And bytWk(1) <= &H9A Then   '全角文字(英字小文字)
            ElseIf bytWk(0) = &H82 And bytWk(1) >= &H9F And bytWk(1) <= &HF1 Then   '全角文字(ひらがな)
            ElseIf bytWk(0) = &H83 And bytWk(1) >= &H40 And bytWk(1) <= &H7E Then   '全角文字(カタカナ)
            ElseIf bytWk(0) = &H83 And bytWk(1) >= &H80 And bytWk(1) <= &H96 Then   '全角文字(カタカナ)
            ElseIf bytWk(0) = &H83 And bytWk(1) >= &H9F And bytWk(1) <= &HB6 Then   '全角文字(ギリシャ文字大文字)
            ElseIf bytWk(0) = &H83 And bytWk(1) >= &HBF And bytWk(1) <= &HD6 Then   '全角文字(ギリシャ文字小文字)
            ElseIf bytWk(0) = &H84 And bytWk(1) >= &H40 And bytWk(1) <= &H60 Then   '全角文字(ロシア文字大文字)
            ElseIf bytWk(0) = &H84 And bytWk(1) >= &H70 And bytWk(1) <= &H7E Then   '全角文字(ロシア文字小文字)
            ElseIf bytWk(0) = &H84 And bytWk(1) >= &H80 And bytWk(1) <= &H91 Then   '全角文字(ロシア文字小文字)
            ElseIf bytWk(0) = &H84 And bytWk(1) >= &H9F And bytWk(1) <= &HBE Then   '全角文字(罫線文字)
            ElseIf bytWk(0) = &H87 And bytWk(1) >= &H40 And bytWk(1) <= &H5D Then   '機種依存文字
                blnFlg = True
            ElseIf bytWk(0) = &H87 And bytWk(1) >= &H5F And bytWk(1) <= &H75 Then   '機種依存文字
                blnFlg = True
            ElseIf bytWk(0) = &H87 And bytWk(1) = &H7E Then                         '機種依存文字
                blnFlg = True
            ElseIf bytWk(0) = &H87 And bytWk(1) >= &H80 And bytWk(1) <= &H99 Then   '機種依存文字
                blnFlg = True
            ElseIf bytWk(0) = &H88 And bytWk(1) >= &H9F Then                        '第一水準漢字
            ElseIf bytWk(0) > &H88 And bytWk(0) < &H98 Then                         '第一水準漢字
            ElseIf bytWk(0) = &H98 And bytWk(1) <= &H72 Then                        '第一水準漢字
            ElseIf bytWk(0) = &H98 And bytWk(1) >= &H9F Then                        '第二水準漢字
            ElseIf bytWk(0) > &H98 And bytWk(0) < &HEA Then                         '第二水準漢字
            ElseIf bytWk(0) = &HEA And bytWk(1) <= &HA4 Then                        '第二水準漢字
            Else                                                                    '不明
                blnFlg = True
            End If
        End If
    End If
    Erase bytWk
    If blnFlg Then
        IsOtherChar = True
    End If
End Function
(ご近所PG)多分よ

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.