Excelで文字化けを逆変換する
中国語や韓国語のテキストが、日本語と誤認識されてしまうと、意味不明な文字列になる。これは、中国語EUC(通称GB2312)や韓国語EUC(通称KS5601)で書かれたテキストが、日本語EUCとして解釈されるために起こる。
テキストファイルやHTMLファイルなら回復の手段も色々あるが、Microsoft Officeしか使われないようなオフィス環境では、説明するのに苦労する。
そこで、Excelのセルに入力された文字列を、逆変換する関数を作った。
下記ページのサンプルを大いに参考にさせていただき、ADODB.Streamクラスを使って簡単に実現できた。
http://homepage2.nifty.com/nonnon/SoftSample/SampleModADOS.html
Excelから、Visual Basic Editorを起動してから、「挿入」「標準モジュール」としたところに、下記のコードを貼り付ければ、セルの中でGBRECOVER(String str)という関数が使えるようになる。
Public Function GBrecover(ByRef strIn As String) As String On Error GoTo ErrHandler Dim objStm As Object Set objStm = CreateObject("ADODB.Stream") objStm.Open objStm.Type = 2 'adTypeText objStm.Charset = "euc-jp" objStm.WriteText strIn objStm.Position = 0 objStm.Charset = "GB2312" GBrecover = objStm.ReadText() objStm.Close Set objStm = Nothing Exit Function ErrHandler: Debug.Print "文字コード変換エラー: " & Err.Description If objStm Is Nothing = False Then objStm.Close Set objStm = Nothing End Function
上記コード中の2箇所のCharsetの設定を変更すれば、KS5601の文字化け逆変換なども簡単に作れる。使用可能なCharsetの一覧は、regeditを起動して、下記のKeyを探せばよい。
HKEY_CLASSES_ROOT\MIME\DataBase\Carset