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)からデータ取得でした。
なお、Base64エンコードについてはその他の方法もあります。
以上、Excel VBAを利用し、PowerShellを実行する簡単な事例(Base64エンコード)でした。
*1:[System.Text.Encoding]::utf8).GetBytes('" & 対象文字列 & "'