[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シフト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.