ExcelのワークシートからGoogleの検索結果にハイパーリンクを張ることを考えていたところ、URLの一部として日本語をそのまま渡すのではなく、UTF-8でエンコードする必要があることに気付きました。
そこで、本来の目的とは違うのですが、VBAを使い、文字列をUTF-8でエンコードするユーザー定義関数を作りました。
例えば「あア亜」を「%E3%81%82%E3%82%A2%E4%BA%9C」に変換します。
JavaScriptだとescapeやencodeURIに相当します。
設定
VisualBasicエディタの設定をする必要があります。
ツール-参照設定-参照設定ダイアログで「Microsoft ActiveX Data Objects 2.8 Library」にチェックを入れます。
2.5以上であれば動くようです。
コード
Function encodeUTF8(mytext As String) As String
Dim mystream As New ADODB.Stream
Dim mybinary, mynumber
With mystream
.Open
.Type = adTypeText
.Charset = "UTF-8"
.WriteText mytext
.Position = 0
.Type = adTypeBinary
.Position = 3
mybinary = .Read
.Close
End With
For Each mynumber In mybinary
encodeUTF8 = encodeUTF8 & "%" & Hex(mynumber)
Next
End Function
ExcelでVBAを使ってテキストを出力する場合は「Open/Print/Close」という方法を使いますが、文字コードをUTF-8にして出力する場合には「ADODB.Stream」オブジェクトを使います。もちろん通常のShift-JISでも出力できます。
詳細はhttp://msdn.microsoft.com/ja-jp/library/cc364272.aspxを参照してください。
サンプル
Sub テキスト出力()
mytext = "これはテスト。" & vbCrLf & "二行目。"
myfile = "D:\test.txt"
With CreateObject("ADODB.Stream")
.Type = 2
.Charset = "utf-8"
.Open
.WriteText mytext, 1
.SaveToFile myfile, 2
.Close
End With
End Sub
説明
Type
「2」とします。1:バイナリ、2:テキスト
Charset
「utf-8」とします。他に「shift_jis」などが使えます。WindowsレジストリのHKEY_CLASSES_ROOT\MIME\Database\Charsetのサブキーにセットされているものが使えます。
WriteText
1番目の引数に出力する文字列を指定します。
2番目の引数に最後の行の終わりに改行を入れるかどうかを指定します。0:改行を入れない、1:改行を入れる
SaveToFile
1番目の引数にファイル名をフルパスで指定します。
2番目の引数に「2」とします。ファイルは上書きされます。