Excel VBAでPowerShellを実行したいときはないでしょうか。
けど、そんな中で悩むことは、
・Excel VBAでPowerShellを実行した結果をExcelにまとめたいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・Excel VBAでPowerShellを実行した結果をExcelにまとめる方法
についてまとめます!
もくじ
Excel VBAでPowerShellを実行した結果をExcelにまとめるイメージ
Excel VBAでPowerShellを実行した結果をExcelにまとめるイメージについて説明をします。
Excel側のセルにPowerShellコマンドを記載します。
VBAを実行すると、PowerShellコマンドが実行され、その結果がExcelのセルに出力されていきます。
それでは早速試してみましょう。
Excel VBAでPowerShellを実行する方法
Excel VBAでPowerShellを実行する方法について説明をします。
WshShellのRunメソッドでPowerShellを実行する
一つ目はWshShellのRunメソッドでPowerShellを実行する方法となります。
RunメソッドはPowerShellを起動し、実行結果を終了コード(成功の0、失敗の1)を返します。
また、パラメータとして、ウインドウの最小化/最大化、表示/非表示、待ち時間を設定することができます。
以下サンプルコードです。
Sub PowerShellコマンド実行テスト()
Dim varResult As Variant
varResult = PowerShell実行Run版("Write-Host 'こんにちはエク短!'")
Debug.Print varResult
End Sub
Function PowerShell実行Run版(strCmd As String) As String
Dim objShell As Object
Dim intResult As Integer
'WshShellオブジェクトをセットします。
Set objShell = CreateObject("WScript.Shell")
intResult = objShell.Run(Command:="powershell -ExecutionPolicy RemoteSigned -Command " & strCmd, WindowStyle:=1, WaitOnReturn:=True)
'PowerShell実行結果を返します。0:成功 1:失敗
PowerShell実行Run版 = intResult
End Function
以下のPowerShellコマンドの結果をVBAで受け取りDebug.Printで表示させています。
Write-Host 'こんにちはエク短!'
結果は成功の0となります。
0
WshShellのExecメソッドでPowerShellを実行する
二つ目はWshShellのExecメソッドでPowerShellを実行する方法となります。
ExecメソッドはPowerShellを起動し、終了コードの他にコマンド実行結果を取得することができます。
各プロパティは以下の通りです。
プロパティ | 説明 |
---|---|
Status | 実行したスクリプトのステータスを返します。 |
StdIn | Execオブジェクトの入力内容を取得します。 |
StdOut | Execオブジェクトの出力内容を取得します。 |
StdErr | Execオブジェクトのエラーを取得します。 |
以下サンプルコードです。
Sub PowerShellコマンド実行テスト()
Dim varResult As Variant
varResult = PowerShell実行Exec版("Write-Host 'こんにちはエク短!'")
Debug.Print varResult
End Sub
Function PowerShell実行Exec版(strCmd As String) As String
Dim objShell As Object
'WshShellオブジェクトをセットしpowershellコマンドで実行します。
Set objShell = CreateObject("WScript.Shell").Exec("powershell -Command " & strCmd)
'PowerShell実行結果を返します。
PowerShell実行Exec版 = objShell.StdOut.ReadAll
End Function
以下のPowerShellコマンドの結果内容をVBAで受け取りDebug.Printで表示させています。
Write-Host 'こんにちはエク短!'
結果は「こんにちはエク短!」となります。
こんにちはエク短!
Excel VBAでPowerShellを実行した結果をExcelにまとめる方法
今回のメインとなるExcel VBAでPowerShellを実行した結果をExcelにまとめる方法について説明をします。
Excelブックを用意する
Excelブックを用意しましょう。VBAを実装するので、マクロ有効形式のxlsmで保存してください。
次に1シート目のB1セルをコマンド入力用、B2セルを上記2つのメソッド切り替え用として用意しましょう。
コマンドの実行結果はB4セルに表示される形になります。
ボタンはPowerShellコマンド実行用のボタンです。
開発タブの挿入>フォームコントロールのボタンアイコンをクリックして挿入してください。
VBAコード
PowerShellコマンド実行用のVBAコードは以下の通りです。
Sub PowerShell実行()
Dim varResult As Variant
With ThisWorkbook.Worksheets(1)
If .Range("B2") = 0 Then
varResult = PowerShell実行Run版(.Range("B1"))
Else
varResult = PowerShell実行Exec版(.Range("B1"))
End If
.Range("B4") = varResult
End With
End Sub
Function PowerShell実行Run版(strCmd As String) As String
Dim objShell As Object
Dim intResult As Integer
'WshShellオブジェクトをセットします。
Set objShell = CreateObject("WScript.Shell")
intResult = objShell.Run(Command:="powershell -ExecutionPolicy RemoteSigned -Command " & strCmd, WindowStyle:=1, WaitOnReturn:=True)
'PowerShell実行結果を返します。0:成功 1:失敗
PowerShell実行Run版 = intResult
End Function
Function PowerShell実行Exec版(strCmd As String) As String
Dim objShell As Object
'WshShellオブジェクトをセットしpowershellコマンドで実行します。
Set objShell = CreateObject("WScript.Shell").Exec("powershell -Command " & strCmd)
'PowerShell実行結果を返します。
PowerShell実行Exec版 = objShell.StdOut.ReadAll
End Function
VBAの実装
VBAの実装方法については
VBAの実装手順
をご参照ください。
ボタンにマクロを登録する
ボタンを右クリックし、[マクロの登録を]選択し、「PowerShell実行」プロシージャを選択、登録します。
VBAを実行する
B1セルに先ほどのサンプルコマンドを入力し、B2セルにExecメソッド実行版である1を指定します。
VBAを実行してみましょう。
はい!PowerShellコマンド実行結果がB4セルに入りましたね!
続いて、B2セルにRunメソッド実行版である0を指定します。この場合成功であれば0の終了コードを返します。
VBAを実行してみましょう。
はい!PowerShellコマンド実行終了コードがB4セルに入りましたね!
VBAの説明
VBAの内容について説明をします。
PowerShell実行Runメソッド版の関数となります。
Function PowerShell実行Run版(strCmd As String) As String
WshShellオブジェクトをセットします。
Set objShell = CreateObject("WScript.Shell")
コマンドをRunメソッドの引数へ渡して実行し、終了コードを取得します。
intResult = objShell.Run(Command:="powershell -ExecutionPolicy RemoteSigned -Command " & strCmd, WindowStyle:=1, WaitOnReturn:=True)
PowerShell実行結果を返します。0:成功 1:失敗
PowerShell実行Run版 = intResult
PowerShell実行Execメソッド版の関数となります。
Function PowerShell実行Exec版(strCmd As String) As String
WshShellオブジェクトをセットしpowershellコマンドで実行します。
Set objShell = CreateObject("WScript.Shell").Exec("powershell -Command " & strCmd)
StdOutプロパティでPowerShell実行結果を返します。
PowerShell実行Exec版 = objShell.StdOut.ReadAll
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・Excel VBAでPowerShellを実行した結果をExcelにまとめる方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す