shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】PowerShellを実行して値を取得する事例(Base64エンコード)

ExcelのVBAからPowerShellを実行して値を取得できると便利なときがあるので、簡単な実行事例です。

VBA単独ではできないがPowerShellを用いると簡単に処理できる事例の一つに、文字列のBase64エンコードがあります。

この題材でVBAからPowerShellコマンドを実行し、結果を取得します。

内容:

動作確認のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2501)です。

VBAサンプル

VBAのサンプルは次のとおりで、PowerShellの処理を含むFunctionを作成し、処理しています。

Sub PowerShellの実行テスト()
    
    MsgBox PowerShellでBase64エンコード("ログイン名:@password")

End Sub

Function PowerShellでBase64エンコード(対象文字列 As String) As String
 
    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    
    Dim コマンド As String
    ' PowerShellのコマンドを設定します。'
    コマンド = "[Convert]::ToBase64String(([System.Text.Encoding]::utf8).GetBytes('" & 対象文字列 & "'))"
    
    ' PowerShellコマンドを実行し、結果を返します。'
    PowerShellでBase64エンコード = objShell.Exec("powershell -Command " & コマンド).StdOut.ReadAll

    ' オブジェクトの解放
    Set objShell = Nothing
 
End Function

 

補足説明

1.WScript.Shellオブジェクトの作成

Dim objShell As Object
Set objShell = CreateObject("WScript.Shell")

WScript.Shellオブジェクトは、Windowsのコマンドラインを操作するために使用されます。これにより、VBAからPowerShellコマンドを実行できます。

2.PowerShellコマンドの設定

    コマンド = "[Convert]::ToBase64String*1"

変数「コマンド」に、PowerShellのコマンド内容を記載しています。

この事例は、文字列をUTF-8エンコードし、それをBase64文字列に変換するコマンドで、この部分を目的に応じて修正します。

3.PowerShellコマンドの実行

以下で、Execメソッドを使用してPowerShellコマンドを実行し、その出力を取得します。

PowerShellでBase64エンコード = objShell.Exec("powershell -Command " & コマンド).StdOut.ReadAll

事例の具体的な活用場面例

今回、Base64エンコードをしたい背景は、Webサービス(kintone)からデータ取得でした。

shikumika.org

なお、Base64エンコードについてはその他の方法もあります。

shikumika.org

以上、Excel VBAを利用し、PowerShellを実行する簡単な事例(Base64エンコード)でした。

*1:[System.Text.Encoding]::utf8).GetBytes('" & 対象文字列 & "'