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