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