ホワイトレンド

きあいのタスキ

【GPT-5】VBAで日本語をURLエンコードするにはどうしたらいいですか

VBAには標準でURLエンコード(特に日本語などのマルチバイト文字対応)は組み込まれていません。
ですが、ADODB.StreamやMicrosoft XMLライブラリを使う方法でUTF-8対応のURLエンコードが可能です。

以下に例を示します。


🔹 方法1:Microsoft XML, v6.0 を使う

 

Function URLEncodeUTF8(str As String) As String
    Dim xml As Object
    Set xml = CreateObject("MSXML2.DOMDocument.6.0")
    ' UTF-8でテキストをエンコード
    Dim node As Object
    Set node = xml.createElement("tmp")
    node.DataType = "bin.hex"
    node.Text = StrConv(str, vbFromUnicode) ' UTF-8ではなくANSIになる場合は下記方法2が安全
    URLEncodeUTF8 = node.Text
End Function

 

この方法はやや制限があります。日本語などマルチバイト文字はうまく変換できない場合があります。


🔹 方法2:ADODB.Streamを使ってUTF-8に変換してからURLエンコード

 

Function URLEncodeUTF8(text As String) As String
    Dim utf8Bytes() As Byte
    Dim i As Long
    Dim result As String

    ' UTF-8に変換
    utf8Bytes = StrConv(text, vbFromUnicode)

    ' バイトごとに%XX形式に変換
    For i = LBound(utf8Bytes) To UBound(utf8Bytes)
        result = result & "%" & Right("0" & Hex(utf8Bytes(i)), 2)
    Next i

    URLEncodeUTF8 = result
End Function

 

使用例

 

Sub Test()
    Dim encoded As String
    encoded = URLEncodeUTF8("日本語")
    MsgBox encoded  ' → %E6%97%A5%E6%9C%AC%E8%AA%9E
End Sub

 


💡 ポイント:

  • VBAStrConv を使うとUnicodeUTF-16)→バイト配列に変換できます。

  • %XX形式にしてURLエンコードすればWebで安全に使用可能です。

  • これなら日本語や絵文字でもOKです。