Word Macro Source Code : 文書中の康煕部首文字を正常文字に置き換える
Word Macro Source Code : 文書中の康煕部首文字を正常文字に置き換える
「置換」コマンドを連続して実行させる、実務に役立つWordのマクロの完全なソースコードを公開しています。
学習目的でもOKですので、ご自由にお使いください。
問題発生機序と本記事プログラムの守備範囲
問題は次の順序で進んでいく
1.メイリオフォントで文書を作成する
2.この文書をPDFファイル化する。この変換時点で根本問題が発生する。
3.Acrobat ReaderでこのPDFファイルを開き、康煕部首文字を「検索」してみる。例えば、文書内に「高」の文字を視認できれば、その「高」を「検索」してみる。ヒットしないことを確認する
4.Acrobat Readerで、文字データを「コピー」する
5.ワープロアプリWordの文書に「貼り付け」る
6.Wordの「検索」コマンドで、康煕部首文字(例えば、「高」という文字)を「検索」してみる。ヒットしないことを確認する
7.ここで本記事プログラムの登場です。
PDFファイル内のデータ操作はあっちの権限なので、私のような野良では対応できません。
なので、本記事にあるように、Wordでの作業になります。
なので、本記事にあるように、Wordでの作業になります。
康煕部首文字やCJK部首補助文字が文書中に混在する問題については次のページに掲載しています。
1.見た目が同一の文字だけど、文字コードが異なっているという意味で「文字化けの問題」を解決する
1.見た目が同一の文字だけど、文字コードが異なっているという意味で「文字化けの問題」を解決する
4.文字列が康煕部首に自動変換される件(コンピュータ)
本記事では、この問題に対処するため、Microsoft社のワープロアプリWordで実行させるmacroのsource codeを掲載しています。
本記事では、この問題に対処するため、Microsoft社のワープロアプリWordで実行させるmacroのsource codeを掲載しています。
動作内容
業務視点:Wordの文書中にある康煕部首文字及びCJK部首補助文字を正常な文字に変換しま
す。
技術視点:
1.Unicodeに対応する数値型データテーブル(ソースでの埋め込み固定値)を、文字型データテーブル(文字として視認可能データ)に変換する。
1.Unicodeに対応する数値型データテーブル(ソースでの埋め込み固定値)を、文字型データテーブル(文字として視認可能データ)に変換する。
2.Word文書中の康煕部首文字及びCJK部首補助文字を、上記Unicode文字型データに置き換える。何故、このようなややこしい仕掛けなのかは、見た目が同一の文字だけど、文字コードが異なっているという意味で「文字化けの問題」を解決するをご覧ください。
良くなる点
「検索」コマンドでヒットしなかった文字がヒットするようになります。
良くならない点
康煕部首文字のFontはMicrosoft JhengHeiのままです。このため、Wordの行間変更コマンドが有効にならないのは、これまでどおりです。手作業で「MS 明朝」などのFontに変換してください。
付加的利点
本プログラムの実行途中で、中間ファイルとして、康煕部首文字及びCJK部首補助文字が書かれたテキストファイルを生成します。このファイルを使えば、逆に、康煕部首文字などを積極的に使いたい人には役に立ちます。
動作内容詳細
1.Wordの「置換」を実行しているだけです。ファイルとして保存はしていません。
2.本プログラムが正常な文字変換を行っているのかを確認できるようにするため、パソコンのファイルシステムの「デスクトップ」に、変換テーブルをファイルとして作成するようにしています。ファイル名は「勇者あああ.txt」と「賢者あああ.txt」です。
macroを実行する度に、これらファイルを上書きします。
これらファイルは削除可能です。
テキストファイルであるため、閲覧可能です。「メモ帳」で内容をみて頂き、変換の対応関係が正しいことをご確認ください。
3.パソコンやWordの設定変更をしていません。
使い方
1.Wordを起動し、康煕部首文字やCJK部首文字が混在するWordの文書ファイルを開く。
2.本macroの実行時間は長いです。本macroを一番最初に使う場合、本macroの動作内容や実行時間を確認して頂いた方が良いため、変換対象の文字数を少なく編集し、実験として実行させることを推奨します。
3.Wordのコマンド>「表示」>「マクロ」>「マクロの表示」>「編集」でMicrosoft Visual Basic for Applications(VBA)を表示させます。
4.下記のWord macro source codeをコピーし、VBAの編集画面に貼り付けます。
5.Wordのコマンド>「表示」>「マクロ」>「マクロの表示」で「康煕部首文字変換マクロ」を選択し「実行」させます。
6.VBAの「イミディエイトウィンドウ」に進捗状況が表示されます。
7.macroの動作終了後に、文字が「検索」コマンドでヒットすることや、文書内容をコピーし「メモ帳」に貼り付けて文字が小さくなっていないことをご確認ください。
特徴
1.基本的には、煕部首文字及びCJK部首補助文字の全ての文字を「置換」します。
ただし、置き換えたくない文字があるかもしれません。また、実行速度が遅いかもしれません。
その場合、下記のプログラムの下の方にある 「lgArray(x) =」の右側を「&H1」に変更してください。そうすれば、その文字コードに対して「置換」コマンドを実行せず、その分動作が早くなります。
2.煕部部首文字やCJK部首補助文字ではない文字を任意の文字に変換したい場合は、既存のテーブルを書き換えてください。
テーブルの数を加除した場合、エラーになります。誤ってテーブルの行を削除してしまうエラーへの対応のため、このような仕様にしています。
'以下、Word macro source code
'変換テーブルのデータを視認できるようにするため、このデータをテキストファイル化している
'使い方などは次のサイトをご覧ください
'https://anti-rugby.blogspot.com/2020/09/word-macro-source-code.html
Option Explicit '変数の宣言が必須
Const 賢者あああ As String = "賢者あああ.txt"
Const 勇者あああ As String = "勇者あああ.txt"
Const iProcess_Kangxi As Integer = 1
Const iProcess_CJK As Integer = 2
Const gKangxiHighestCode As Long = &H2FD5
Const gKangxiLowestCode As Long = &H2F00
Const gCJKHighestCode As Long = &H2EF3
Const gCJKLowestCode As Long = &H2E80
Dim iExecutions, iAllItems As Integer
Sub 康煕部首文字変換マクロ()
Debug.Print vbCrLf
Debug.Print "*** Macro has newly started! *** " + Format(Now, "yyyy/mm/dd HH:mm:ss")
Dim sFileFullPathName As String
Dim sInput As String
Dim WSH As Object 'Windows Script Host
iExecutions = 0
iAllItems = 0
Set WSH = CreateObject("WScript.Shell")
translateUnicode WSH, iProcess_CJK
translateUnicode WSH, iProcess_Kangxi
Debug.Print "*** end of macro *** executions : " + CStr(iExecutions) + vbCrLf
MsgBox "処理終了"
End Sub
Private Sub 変換実行(sRadical As String, sDestination As String)
'このままだとフォントがMicrosoft JhengHeiになったままになる
Selection.HomeKey Unit:=wdStory
Selection.WholeStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = sRadical
.Replacement.Text = sDestination
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Collapse Direction:=wdCollapseStart
End Sub
Private Function getStringFromFile(sFileFullPathName As String)
Dim sInput As String
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile sFileFullPathName
sInput = .ReadText
.Close
End With
'image of inputted data: "?":"一","?":"丨","?":"龠"
If sInput = "" Or InStr(sInput, ":") = 0 Or InStr(sInput, """") = 0 Then
MsgBox "ファイル内データが誤っている。処理終了"
Debug.Print "The format in the table text file is not correct."
End
End If
getStringFromFile = sInput
End Function
Private Function getNumberOfAllItems(sInput As String)
Dim i, j As Integer
i = 1
j = InStr(i, sInput, ",", vbTextCompare)
Do While j <> 0
iAllItems = iAllItems + 1
i = j + 1
j = InStr(i, sInput, ",", vbTextCompare)
Loop
iAllItems = iAllItems + 1
End Function
Private Function translateUnicode(WSH As Object, iProcess As Integer)
Dim sFileFullPathName As String
Dim iHighestCode, iLowestCode As Integer
Dim sInput As String
Select Case iProcess
Case iProcess_Kangxi
Debug.Print "start of translateUnicode() for Kangxi"
sFileFullPathName = WSH.SpecialFolders("Desktop") + "\" + 勇者あああ
makeKangxiTableFile sFileFullPathName
iHighestCode = gKangxiHighestCode
iLowestCode = gKangxiLowestCode
Case iProcess_CJK
Debug.Print "start of translateUnicode() for CJK"
sFileFullPathName = WSH.SpecialFolders("Desktop") + "\" + 賢者あああ
makeCJKTableFile sFileFullPathName
iHighestCode = gCJKHighestCode
iLowestCode = gCJKLowestCode
Case Else
Debug.Print "error : TranslateUnicode()"
End
End Select
sInput = getStringFromFile(sFileFullPathName)
getNumberOfAllItems sInput
Dim iSearchComma, iPlacedComma As Integer
Dim s As String
Dim lg As Long
iSearchComma = 1
iPlacedComma = InStr(iSearchComma, sInput, ",", vbTextCompare)
Do While iPlacedComma <> 0
s = Mid(sInput, iSearchComma, iPlacedComma - iSearchComma)
s = Replace(s, """", "")
s = Replace(s, ":", "")
s = Replace(s, vbCrLf, "")
lg = AscW(Mid(s, 1, 1))
If lg >= iLowestCode And lg <= iHighestCode Then ' range of radicals
Else
Debug.Print "That's not a correct radical at " + CStr(iExecutions)
End
End If
lg = AscW(Mid(s, 2, 1))
If lg >= iLowestCode And lg <= iHighestCode Then
Debug.Print "That is a radical at " + CStr(iExecutions)
End
Else
If lg = 1 Then ' escape from secondary effect
Debug.Print "escape. No." + CStr(iExecutions) + " " + Mid(s, 1, 1)
Else
iExecutions = iExecutions + 1
変換実行 Mid(s, 1, 1), Mid(s, 2, 1)
End If
End If
iSearchComma = iPlacedComma + 1
iPlacedComma = InStr(iSearchComma, sInput, ",", vbTextCompare)
If iExecutions Mod 10 = 0 Then
Debug.Print " " + CStr(iExecutions) + " / " + CStr(iAllItems)
End If
Loop
s = Mid(sInput, iSearchComma, Len(sInput))
s = Replace(s, """", "")
s = Replace(s, ":", "")
s = Replace(s, vbCrLf, "")
If Len(s) = 2 Then
lg = AscW(Mid(s, 1, 1))
If lg >= iLowestCode And lg <= iHighestCode Then
Else
Debug.Print "That's not a correct radical at " + CStr(iExecutions)
End
End If
lg = AscW(Mid(s, 2, 1))
If lg >= iLowestCode And lg <= iHighestCode Then
Debug.Print "That is a radical at " + CStr(iExecutions)
End
Else
If lg = 1 Then ' escape from secondary effect
Debug.Print "escape. No." + CStr(iExecutions) + " " + Mid(s, 1, 1)
Else
iExecutions = iExecutions + 1
変換実行 Mid(s, 1, 1), Mid(s, 2, 1)
End If
End If
Debug.Print " " + CStr(iExecutions) + " / " + CStr(iAllItems)
End If
Debug.Print "end of translateUnicode() executions : " + CStr(iExecutions)
End Function
Private Function makeKangxiTableFile(sFileFullPathName As String)
Const adTypeText = 2 'https://teratail.com/questions/204165
Const adWriteChar = 0 'https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/streamwriteenum?view=sql-server-ver15
Const adSaveCreateOverWrite = 2 'https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/saveoptionsenum?view=sql-server-ver15
Const iKangxis As Integer = gKangxiHighestCode - gKangxiLowestCode + 1 'number of Kangxi characters
Dim lgKangxiCode, lgArrayKangxiU(iKangxis) As Long
Dim i As Integer
For i = 0 To iKangxis - 1
lgArrayKangxiU(i) = 0
Next i
setKangxiUnicode lgArrayKangxiU
For i = 0 To iKangxis - 1
If lgArrayKangxiU(i) = 0 Then
Debug.Print "error : at makeKangxiTableFile(), making array(" + CStr(i) + ")"
End
End If
Next i
Debug.Print "makeKangxiTableFile() filename is " + sFileFullPathName
lgKangxiCode = gKangxiLowestCode
With CreateObject("ADODB.Stream")
.Type = adTypeText
.Charset = "UTF-8"
.Open
For i = 1 To iKangxis
.WriteText """", adWriteChar
.WriteText ChrW(lgKangxiCode), adWriteChar
.WriteText """:""", adWriteChar
.WriteText ChrW(lgArrayKangxiU(i - 1)), adWriteChar
.WriteText """", adWriteChar
If i < iKangxis Then
.WriteText ",", adWriteChar
.WriteText vbCrLf, adWriteChar '改行挿入
End If
lgKangxiCode = lgKangxiCode + 1
Next i
.SaveToFile sFileFullPathName, adSaveCreateOverWrite
.Close
End With
If Dir(sFileFullPathName, vbNormal) = "" Then
MsgBox "変換テーブルファイル" & vbCrLf & sFileFullPathName + "が" & vbCrLf & "デスクトップに存在しません。", vbExclamation
End
End If
End Function
Private Function makeCJKTableFile(sFileFullPathName As String)
Const adTypeText = 2 'https://teratail.com/questions/204165
Const adWriteChar = 0 'https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/streamwriteenum?view=sql-server-ver15
Const adSaveCreateOverWrite = 2 'https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/saveoptionsenum?view=sql-server-ver15
Const iCJKs As Integer = gCJKHighestCode - gCJKLowestCode + 1 'number of CJK characters
Dim lgCJKCode, lgArrayCJKU(iCJKs) As Long
Dim i As Integer
For i = 0 To iCJKs - 1
lgArrayCJKU(i) = 0
Next i
setCJKUnicode lgArrayCJKU
For i = 0 To iCJKs - 1
If lgArrayCJKU(i) = 0 Then
Debug.Print "error : at makeCJKTableFile(), making array(" + CStr(i) + ")"
End
End If
Next i
Debug.Print "makeCJKTableFile() filename is " + sFileFullPathName
lgCJKCode = gCJKLowestCode
With CreateObject("ADODB.Stream")
.Type = adTypeText
.Charset = "UTF-8"
.Open
For i = 1 To iCJKs
If lgCJKCode = &H2E9A Then
'This code isn't been used.
Debug.Print " Code 0x2e9a in CJK isn't been used"
Else
.WriteText """", adWriteChar
.WriteText ChrW(lgCJKCode), adWriteChar
.WriteText """:""", adWriteChar
.WriteText ChrW(lgArrayCJKU(i - 1)), adWriteChar
.WriteText """", adWriteChar
If i < iCJKs Then
.WriteText ",", adWriteChar
.WriteText vbCrLf, adWriteChar '改行挿入
End If
End If
lgCJKCode = lgCJKCode + 1
Next i
.SaveToFile sFileFullPathName, adSaveCreateOverWrite
.Close
End With
If Dir(sFileFullPathName, vbNormal) = "" Then
MsgBox "変換テーブルファイル" & vbCrLf & sFileFullPathName + "が" & vbCrLf & "デスクトップに存在しません。", vbExclamation
End
End If
End Function
Private Function setCJKUnicode(lgArray() As Long)
'全部で115個 = 116個 - 1個(0x2e9a)
lgArray(0) = AscW("〃") '2e80
lgArray(1) = &H5382 '2e81
lgArray(2) = &H4E5B '2e82
lgArray(3) = &H4E5A '2e83
lgArray(4) = &H4E59 '2e84
lgArray(5) = &H4EBB '2e85
lgArray(6) = &H5182 '2e86
lgArray(7) = &H51E0 '2e87
lgArray(8) = &H5200 '2e88
lgArray(9) = &H5202 '2e89
lgArray(10) = &H535C '2e8a
lgArray(11) = &H353E '2e8b
lgArray(12) = &H5C0F '2e8c
lgArray(13) = &H5C0F '2e8d
lgArray(14) = &H5140 '2e8e
lgArray(15) = &H5C23 '2e8f
lgArray(16) = &H5C22 '2e90
lgArray(17) = &H5C23 '2e91
lgArray(18) = &H5DF3 '2e92
lgArray(19) = &H5E7A '2e93
lgArray(20) = &H5F51 '2e94
lgArray(21) = &H5F50 '2e95
lgArray(22) = &H5FC4 '2e96
lgArray(23) = &H5FC3 '2e97
lgArray(24) = &H624C '2e98
lgArray(25) = &H6535 '2e99
lgArray(26) = &H1 '2e9a not used
lgArray(27) = &H65E1 '2e9b
lgArray(28) = &H65E5 '2e9c
lgArray(29) = &H6708 '2e9d
lgArray(30) = &H6B7A '2e9e
lgArray(31) = &H6BCD '2e9f
lgArray(32) = &H6C11 '2ea0
lgArray(33) = &H6C35 '2ea1
lgArray(34) = &H6C3A '2ea2
lgArray(35) = &H706C '2ea3
lgArray(36) = &H722B '2ea4
lgArray(37) = &H722B '2ea5
lgArray(38) = &H4E2C '2ea6
lgArray(39) = &H725B '2ea7
lgArray(40) = &H72AD '2ea8
lgArray(41) = &H738B '2ea9
lgArray(42) = &H758B '2eaa
lgArray(43) = &H7F52 '2eab
lgArray(44) = &H793A '2eac
lgArray(45) = &H793B '2ead
lgArray(46) = &H7AF9 '2eae
lgArray(47) = &H7CF9 '2eaf
lgArray(48) = &H7E9F '2eb0
lgArray(49) = &H7F53 '2eb1
lgArray(50) = &H7F52 '2eb2
lgArray(51) = &H34C1 '2eb3
lgArray(52) = &H34C1 '2eb4
' lgArray(53) = &H2626B '2eb5 https://www.unicode.org/charts/
lgArray(53) = &H25CF '2eb5 input ●
lgArray(54) = &H7F8A '2eb6
lgArray(55) = &H7F8A '2eb7
lgArray(56) = &H7F8B '2eb8
lgArray(57) = &H8002 '2eb9
lgArray(58) = &H8080 '2eba
lgArray(59) = &H807F '2ebb
lgArray(60) = &H8089 '2ebc
lgArray(61) = &H81FC '2ebd
lgArray(62) = &H8279 '2ebe
lgArray(63) = &H8279 '2ebf
lgArray(64) = &H8279 '2ec0
lgArray(65) = &H864E '2ec1
lgArray(66) = &H8864 '2ec2
lgArray(67) = &H8980 '2ec3
lgArray(68) = &H897F '2ec4
lgArray(69) = &H89C1 '2ec5
lgArray(70) = &H89D2 '2ec6
' lgArray(71) = &H278B2 '2ec7
lgArray(71) = &H25CF '2ec7
lgArray(72) = &H8BA0 '2ec8
lgArray(73) = &H8D1D '2ec9
lgArray(74) = &H8DB3 '2eca
lgArray(75) = &H8F66 '2ecb
lgArray(76) = &H8FB6 '2ecc
lgArray(77) = &H8FB6 '2ecd
lgArray(78) = &H8FB6 '2ece
lgArray(79) = &H9091 '2ecf
lgArray(80) = &H9485 '2ed0
lgArray(81) = &H9577 '2ed1
lgArray(82) = &H9578 '2ed2
lgArray(83) = &H957F '2ed3
lgArray(84) = &H95E8 '2ed4
lgArray(85) = &H961C '2ed5
lgArray(86) = &H961D '2ed6
lgArray(87) = &H96E8 '2ed7
lgArray(88) = &H9752 '2ed8
lgArray(89) = &H97E6 '2ed9
lgArray(90) = &H9875 '2eda
lgArray(91) = &H98CE '2edb
lgArray(92) = &H98DE '2edc
lgArray(93) = &H98DF '2edd
' lgArray(94) = &H2967F '2ede
lgArray(94) = &H25CF '2ede
lgArray(95) = &H98E0 '2edf
lgArray(96) = &H9963 '2ee0
' lgArray(97) = &H29810 '2ee1
lgArray(97) = &H25CF '2ee1
lgArray(98) = &H9A6C '2ee2
lgArray(99) = &H9AA8 '2ee3
lgArray(100) = &H9B3C '2ee4
lgArray(101) = &H9C7C '2ee5
lgArray(102) = &H9E1F '2ee6
lgArray(103) = &H5364 '2ee7
lgArray(104) = &H9EA6 '2ee8
lgArray(105) = &H9EC4 '2ee9
lgArray(106) = &H9EFE '2eea
lgArray(107) = &H6589 '2eeb
lgArray(108) = &H9F50 '2eec
lgArray(109) = &H6B6F '2eed
lgArray(110) = &H9F7F '2eee
lgArray(111) = &H7ADC '2eef
lgArray(112) = &H9F99 '2ef0
lgArray(113) = &H9F9C '2ef1
lgArray(114) = &H4E80 '2ef2
lgArray(115) = &H9F9F '2ef3
End Function
Private Function setKangxiUnicode(lgArray() As Long)
lgArray(&H2F00 - &H2F00) = &H4E00 '2f00
lgArray(&H2F01 - &H2F00) = &H4E28
lgArray(&H2F02 - &H2F00) = &H4E36
lgArray(&H2F03 - &H2F00) = &H4E3F
lgArray(&H2F04 - &H2F00) = &H4E59
lgArray(&H2F05 - &H2F00) = &H4E85
lgArray(&H2F06 - &H2F00) = &H4E8C
lgArray(&H2F07 - &H2F00) = &H4EA0
lgArray(&H2F08 - &H2F00) = &H4EBA
lgArray(&H2F09 - &H2F00) = &H513F
lgArray(&H2F0A - &H2F00) = &H5165
lgArray(&H2F0B - &H2F00) = &H516B
lgArray(&H2F0C - &H2F00) = &H5182
lgArray(&H2F0D - &H2F00) = &H5196
lgArray(&H2F0E - &H2F00) = &H51AB
lgArray(&H2F0F - &H2F00) = &H51E0
lgArray(&H2F10 - &H2F00) = &H51F5
lgArray(&H2F11 - &H2F00) = &H5200
lgArray(&H2F12 - &H2F00) = &H529B
lgArray(&H2F13 - &H2F00) = &H52F9
lgArray(&H2F14 - &H2F00) = &H5315
lgArray(&H2F15 - &H2F00) = &H531A
lgArray(&H2F16 - &H2F00) = &H5338
lgArray(&H2F17 - &H2F00) = &H5341
lgArray(&H2F18 - &H2F00) = &H535C
lgArray(&H2F19 - &H2F00) = &H5369
lgArray(&H2F1A - &H2F00) = &H5382
lgArray(&H2F1B - &H2F00) = &H53B6
lgArray(&H2F1C - &H2F00) = &H53C8
lgArray(&H2F1D - &H2F00) = &H53E3
lgArray(&H2F1E - &H2F00) = &H56D7
lgArray(&H2F1F - &H2F00) = &H571F
lgArray(&H2F20 - &H2F00) = &H58EB
lgArray(&H2F21 - &H2F00) = &H5902
lgArray(&H2F22 - &H2F00) = &H590A
lgArray(&H2F23 - &H2F00) = &H5915
lgArray(&H2F24 - &H2F00) = &H5927
lgArray(&H2F25 - &H2F00) = &H5973
lgArray(&H2F26 - &H2F00) = &H5B50
lgArray(&H2F27 - &H2F00) = &H5B80
lgArray(&H2F28 - &H2F00) = &H5BF8
lgArray(&H2F29 - &H2F00) = &H5C0F
lgArray(&H2F2A - &H2F00) = &H5C22
lgArray(&H2F2B - &H2F00) = &H5C38
lgArray(&H2F2C - &H2F00) = &H5C6E
lgArray(&H2F2D - &H2F00) = &H5C71
lgArray(&H2F2E - &H2F00) = &H5DDB
lgArray(&H2F2F - &H2F00) = &H5DE5
lgArray(&H2F30 - &H2F00) = &H5DF1
lgArray(&H2F31 - &H2F00) = &H5DFE
lgArray(&H2F32 - &H2F00) = &H5E72
lgArray(&H2F33 - &H2F00) = &H5E7A
lgArray(&H2F34 - &H2F00) = &H5E7F
lgArray(&H2F35 - &H2F00) = &H5EF4
lgArray(&H2F36 - &H2F00) = &H5EFE
lgArray(&H2F37 - &H2F00) = &H5F0B
lgArray(&H2F38 - &H2F00) = &H5F13
lgArray(&H2F39 - &H2F00) = &H5F50
lgArray(&H2F3A - &H2F00) = &H5F61
lgArray(&H2F3B - &H2F00) = &H5F73
lgArray(&H2F3C - &H2F00) = &H5FC3
lgArray(&H2F3D - &H2F00) = &H6208
lgArray(&H2F3E - &H2F00) = &H6236
lgArray(&H2F3F - &H2F00) = &H624B
lgArray(&H2F40 - &H2F00) = &H652F
lgArray(&H2F41 - &H2F00) = &H6534
lgArray(&H2F42 - &H2F00) = &H6587
lgArray(&H2F43 - &H2F00) = &H6597
lgArray(&H2F44 - &H2F00) = &H65A4
lgArray(&H2F45 - &H2F00) = &H65B9
lgArray(&H2F46 - &H2F00) = &H65E0
lgArray(&H2F47 - &H2F00) = &H65E5
lgArray(&H2F48 - &H2F00) = &H66F0
lgArray(&H2F49 - &H2F00) = &H6708
lgArray(&H2F4A - &H2F00) = &H6728
lgArray(&H2F4B - &H2F00) = &H6B20
lgArray(&H2F4C - &H2F00) = &H6B62
lgArray(&H2F4D - &H2F00) = &H6B79
lgArray(&H2F4E - &H2F00) = &H6BB3
lgArray(&H2F4F - &H2F00) = &H6BCB
lgArray(&H2F50 - &H2F00) = &H6BD4
lgArray(&H2F51 - &H2F00) = &H6BDB
lgArray(&H2F52 - &H2F00) = &H6C0F
lgArray(&H2F53 - &H2F00) = &H6C14
lgArray(&H2F54 - &H2F00) = &H6C34
lgArray(&H2F55 - &H2F00) = &H706B
lgArray(&H2F56 - &H2F00) = &H722A
lgArray(&H2F57 - &H2F00) = &H7236
lgArray(&H2F58 - &H2F00) = &H723B
lgArray(&H2F59 - &H2F00) = &H723F
lgArray(&H2F5A - &H2F00) = &H7247
lgArray(&H2F5B - &H2F00) = &H7259
lgArray(&H2F5C - &H2F00) = &H725B
lgArray(&H2F5D - &H2F00) = &H72AC
lgArray(&H2F5E - &H2F00) = &H7384
lgArray(&H2F5F - &H2F00) = &H7389
lgArray(&H2F60 - &H2F00) = &H74DC
lgArray(&H2F61 - &H2F00) = &H74E6
lgArray(&H2F62 - &H2F00) = &H7518
lgArray(&H2F63 - &H2F00) = &H751F
lgArray(&H2F64 - &H2F00) = &H7528
lgArray(&H2F65 - &H2F00) = &H7530
lgArray(&H2F66 - &H2F00) = &H758B
lgArray(&H2F67 - &H2F00) = &H7592
lgArray(&H2F68 - &H2F00) = &H7676
lgArray(&H2F69 - &H2F00) = &H767D
lgArray(&H2F6A - &H2F00) = &H76AE
lgArray(&H2F6B - &H2F00) = &H76BF
lgArray(&H2F6C - &H2F00) = &H76EE
lgArray(&H2F6D - &H2F00) = &H77DB
lgArray(&H2F6E - &H2F00) = &H77E2
lgArray(&H2F6F - &H2F00) = &H77F3
lgArray(&H2F70 - &H2F00) = &H793A
lgArray(&H2F71 - &H2F00) = &H79B8
lgArray(&H2F72 - &H2F00) = &H79BE
lgArray(&H2F73 - &H2F00) = &H7A74
lgArray(&H2F74 - &H2F00) = &H7ACB
lgArray(&H2F75 - &H2F00) = &H7AF9
lgArray(&H2F76 - &H2F00) = &H7C73
lgArray(&H2F77 - &H2F00) = &H7CF8
lgArray(&H2F78 - &H2F00) = &H7F36
lgArray(&H2F79 - &H2F00) = &H7F51
lgArray(&H2F7A - &H2F00) = &H7F8A
lgArray(&H2F7B - &H2F00) = &H7FBD
lgArray(&H2F7C - &H2F00) = &H8001
lgArray(&H2F7D - &H2F00) = &H800C
lgArray(&H2F7E - &H2F00) = &H8012
lgArray(&H2F7F - &H2F00) = &H8033
lgArray(&H2F80 - &H2F00) = &H807F
lgArray(&H2F81 - &H2F00) = &H8089
lgArray(&H2F82 - &H2F00) = &H81E3
lgArray(&H2F83 - &H2F00) = &H81EA
lgArray(&H2F84 - &H2F00) = &H81F3
lgArray(&H2F85 - &H2F00) = &H81FC
lgArray(&H2F86 - &H2F00) = &H820C
lgArray(&H2F87 - &H2F00) = &H821B
lgArray(&H2F88 - &H2F00) = &H821F
lgArray(&H2F89 - &H2F00) = &H826E
lgArray(&H2F8A - &H2F00) = &H8272
lgArray(&H2F8B - &H2F00) = &H8278
lgArray(&H2F8C - &H2F00) = &H864D
lgArray(&H2F8D - &H2F00) = &H866B
lgArray(&H2F8E - &H2F00) = &H8840
lgArray(&H2F8F - &H2F00) = &H884C
lgArray(&H2F90 - &H2F00) = &H8863
lgArray(&H2F91 - &H2F00) = &H897E
lgArray(&H2F92 - &H2F00) = &H898B
lgArray(&H2F93 - &H2F00) = &H89D2
lgArray(&H2F94 - &H2F00) = &H8A00
lgArray(&H2F95 - &H2F00) = &H8C37
lgArray(&H2F96 - &H2F00) = &H8C46
lgArray(&H2F97 - &H2F00) = &H8C55
lgArray(&H2F98 - &H2F00) = &H8C78
lgArray(&H2F99 - &H2F00) = &H8C9D
lgArray(&H2F9A - &H2F00) = &H8D64
lgArray(&H2F9B - &H2F00) = &H8D70
lgArray(&H2F9C - &H2F00) = &H8DB3
lgArray(&H2F9D - &H2F00) = &H8EAB
lgArray(&H2F9E - &H2F00) = &H8ECA
lgArray(&H2F9F - &H2F00) = &H8F9B
lgArray(&H2FA0 - &H2F00) = &H8FB0
lgArray(&H2FA1 - &H2F00) = &H8FB5
lgArray(&H2FA2 - &H2F00) = &H9091
lgArray(&H2FA3 - &H2F00) = &H9149
lgArray(&H2FA4 - &H2F00) = &H91C6
lgArray(&H2FA5 - &H2F00) = &H91CC
lgArray(&H2FA6 - &H2F00) = &H91D1
lgArray(&H2FA7 - &H2F00) = &H9577
lgArray(&H2FA8 - &H2F00) = &H9580
lgArray(&H2FA9 - &H2F00) = &H961C
lgArray(&H2FAA - &H2F00) = &H96B6
lgArray(&H2FAB - &H2F00) = &H96B9
lgArray(&H2FAC - &H2F00) = &H96E8
lgArray(&H2FAD - &H2F00) = &H9751
lgArray(&H2FAE - &H2F00) = &H975E
lgArray(&H2FAF - &H2F00) = &H9762
lgArray(&H2FB0 - &H2F00) = &H9769
lgArray(&H2FB1 - &H2F00) = &H97CB
lgArray(&H2FB2 - &H2F00) = &H97ED
lgArray(&H2FB3 - &H2F00) = &H97F3
lgArray(&H2FB4 - &H2F00) = &H9801
lgArray(&H2FB5 - &H2F00) = &H98A8
lgArray(&H2FB6 - &H2F00) = &H98DB
lgArray(&H2FB7 - &H2F00) = &H98DF
lgArray(&H2FB8 - &H2F00) = &H9996
lgArray(&H2FB9 - &H2F00) = &H9999
lgArray(&H2FBA - &H2F00) = &H99AC
lgArray(&H2FBB - &H2F00) = &H9AA8
lgArray(&H2FBC - &H2F00) = &H9AD8
lgArray(&H2FBD - &H2F00) = &H9ADF
lgArray(&H2FBE - &H2F00) = &H9B25
lgArray(&H2FBF - &H2F00) = &H9B2F
lgArray(&H2FC0 - &H2F00) = &H9B32
lgArray(&H2FC1 - &H2F00) = &H9B3C
lgArray(&H2FC2 - &H2F00) = &H9B5A
lgArray(&H2FC3 - &H2F00) = &H9CE5
lgArray(&H2FC4 - &H2F00) = &H9E75
lgArray(&H2FC5 - &H2F00) = &H9E7F
lgArray(&H2FC6 - &H2F00) = &H9EA5
lgArray(&H2FC7 - &H2F00) = &H9EBB
lgArray(&H2FC8 - &H2F00) = &H9EC3
lgArray(&H2FC9 - &H2F00) = &H9ECD
lgArray(&H2FCA - &H2F00) = &H9ED1
lgArray(&H2FCB - &H2F00) = &H9EF9
lgArray(&H2FCC - &H2F00) = &H9EFD
lgArray(&H2FCD - &H2F00) = &H9F0E
lgArray(&H2FCE - &H2F00) = &H9F13
lgArray(&H2FCF - &H2F00) = &H9F20
lgArray(&H2FD0 - &H2F00) = &H9F3B
lgArray(&H2FD1 - &H2F00) = &H9F4A
lgArray(&H2FD2 - &H2F00) = &H9F52
lgArray(&H2FD3 - &H2F00) = &H9F8D
lgArray(&H2FD4 - &H2F00) = &H9F9C
lgArray(&H2FD5 - &H2F00) = &H9FA0
End Function