Excel VBAでPowerShellを実行する方法2選!処理結果取得も!

Excel VBAでPowerShellを実行する方法2選!処理結果取得も!

Excel VBAでPowerShellを実行したいときはないでしょうか。

けど、そんな中で悩むことは、

・Excel VBAでPowerShellを実行したいが方法がよくわからない
・Excel VBAでPowerShellを実行した結果をExcelにまとめたいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・Excel VBAでPowerShellを実行する方法
・Excel VBAでPowerShellを実行した結果をExcelにまとめる方法

についてまとめます!

Excel VBAでPowerShellを実行した結果をExcelにまとめるイメージ

Excel VBAでPowerShellを実行した結果をExcelにまとめるイメージについて説明をします。

Excel側のセルにPowerShellコマンドを記載します。

VBAを実行すると、PowerShellコマンドが実行され、その結果がExcelのセルに出力されていきます。

タカヒロ
タカヒロ
PowerShellの結果をまとめたいときにボタンワンぽちでできますので、便利ですね!

それでは早速試してみましょう。

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

タカヒロ
タカヒロ
Runメソッドは処理が正常にされたか判断したいとき使うとよいでしょう。

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 'こんにちはエク短!'

結果は「こんにちはエク短!」となります。

こんにちはエク短!

タカヒロ
タカヒロ
PowerShellコマンドの処理結果内容をExcelへまとめたいときはExecメソッドを使うとよいでしょう。

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 VBAでPowerShellを実行した結果をExcelにまとめる方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です