Excel VBA で URL エンコード文字列をデコードする 2 つの方法

URL に含まれる日本語や記号はパーセント記法(%E3%81%AAど)へ変換されています。Excel VBA では JScriptPowerShell を利用して簡単に元の文字列(デコード)へ戻せます。本記事では両手法のコード例とポイントをまとめます。


目次

動作環境

項目内容
OSWindows 10/11
ExcelMicrosoft 365/2019/2016
追加ツールなし(標準機能のみ)

方法 1:ScriptControl(JScript)の decodeURI を呼び出す

ScriptControl を使うと、VBA から JavaScript 関数を呼び出せます。参照設定は不要で、32 ビット/64 ビットの両環境で動作します。

Sub DecodeUrlWithJScript()
    
    Dim encodedText As String
    Dim sc          As Object      ' MSScriptControl.ScriptControl
    
    encodedText = "E6%A3%AE%20Rintaro"
    
    Set sc = CreateObject("ScriptControl")
    sc.Language = "JScript"
    
    ' decodeURI でデコード
    encodedText = sc.CodeObject.decodeURI(encodedText)
    
    MsgBox encodedText, vbInformation, "デコード結果"
    
End Sub

ポイント

  • Language = "JScript" で JavaScript 実行環境を設定します。
  • decodeURI はエンコードされた文字列を UTF-8 として解釈し、元の日本語へ戻します。
  • ScriptControl は Windows 標準の COM コンポーネントで、追加インストールは不要です。

方法 2:PowerShell の System.Web.HttpUtility.UrlDecode を呼び出す

PowerShell 経由で .NET Framework の URL デコード関数を利用する方法です。非同期で実行し、標準出力を VBA 側で受け取ります。

Sub DecodeUrlWithPowerShell()
    
    Dim encodedText As String
    Dim psCmd       As String
    Dim wsh         As Object      ' WScript.Shell
    Dim execObj     As Object      ' WshScriptExec
    
    encodedText = "E6%A3%AE%20Rintaro"
    
    ' PowerShell コマンド組み立て
    psCmd = "powershell -NoProfile -Command " & _
            """Add-Type -AssemblyName System.Web;" & _
            "Write-Output ([System.Web.HttpUtility]::UrlDecode('" & encodedText & "'))"""
    
    Set wsh = CreateObject("WScript.Shell")
    Set execObj = wsh.Exec(psCmd)
    
    MsgBox execObj.StdOut.ReadAll, vbInformation, "デコード結果"
    
End Sub

ポイント

  • -NoProfile で PowerShell のプロファイル読み込みを省き、実行を高速化します。
  • Add-Type により System.Web アセンブリを読み込み、UrlDecode メソッドを利用します。
  • Exec メソッドは非同期実行ですが、StdOut.ReadAll で完了を待ちながら結果を取得できます。

使い分けの目安

シナリオ推奨手法
Excel だけで完結させたいScriptControl
大量デコードをバッチ処理したいPowerShell
エンコードとデコードを両方行ういずれも可(encodeURIUrlEncode を併用)

まとめ

  • ScriptControl は軽量で実装が簡単。
  • PowerShell は .NET の豊富なライブラリを活用でき、複雑な処理にも柔軟。

いずれの方法も追加ライブラリなしで利用できますので、用途に応じて使い分けてください。URL デコードを自動化することで、外部 API や Web フォームとの連携がよりスムーズになります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次