Excel VBA 逆引き集 | PowerShell呼び出し

Excel VBA
スポンサーリンク

外部連携 × PowerShell呼び出し

Excel VBAから PowerShellスクリプトを呼び出す ことで、Windowsの機能や外部処理を連携できます。
例えば「ファイル操作」「外部API呼び出し」「システム情報取得」などをPowerShellに任せ、結果をExcelに取り込むことが可能です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • PowerShell呼び出しの流れ
    1. VBAから ShellWScript.Shell を使ってPowerShellを起動
    2. PowerShellにコマンドやスクリプトを渡す
    3. 結果をファイルや標準出力で受け取り、Excelに展開
  • 用途例:
    • PowerShellでファイル一覧を取得 → Excelに書き込む
    • PowerShellで外部APIを呼び出す → 結果をExcelに取り込む
    • PowerShellでシステム情報を取得 → Excelで管理

テンプレ1:簡単なPowerShellコマンド呼び出し

Sub Call_PowerShell_Basic()
    Dim cmd As String
    
    ' PowerShellで日時を表示するコマンド
    cmd = "powershell -command ""Get-Date"""
    
    ' 実行
    Shell cmd, vbNormalFocus
End Sub
VB
  • ポイント:
    • Shell "powershell -command ""コマンド""" で呼び出し。
    • この例ではPowerShellのウィンドウに日時が表示される。

テンプレ2:PowerShell結果をテキストファイルに出力 → Excelで読み込み

Sub Call_PowerShell_OutputFile()
    Dim cmd As String
    Dim fso As Object, ts As Object, line As String
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rowCount As Long
    
    ' PowerShellでCドライブのファイル一覧を取得し、テキストに出力
    cmd = "powershell -command ""Get-ChildItem C:\ | Out-File C:\temp\filelist.txt"""
    Shell cmd, vbHide
    
    ' 少し待機(処理完了を待つ)
    Application.Wait (Now + TimeValue("0:00:02"))
    
    ' テキストファイルを読み込んでシートに展開
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile("C:\temp\filelist.txt", 1)
    
    ws.Cells.Clear
    rowCount = 1
    Do Until ts.AtEndOfStream
        line = ts.ReadLine
        ws.Cells(rowCount, 1).Value = line
        rowCount = rowCount + 1
    Loop
    ts.Close
    
    MsgBox "PowerShellで取得したファイル一覧をExcelに展開しました!"
End Sub
VB
  • ポイント:
    • PowerShellの結果を Out-File でテキストに保存。
    • VBAでテキストを読み込んでシートに展開。

テンプレ3:PowerShellスクリプトファイル(.ps1)を呼び出す

Sub Call_PowerShell_Script()
    Dim cmd As String
    
    ' PowerShellスクリプトファイルを実行
    cmd = "powershell -ExecutionPolicy Bypass -File C:\temp\myscript.ps1"
    
    Shell cmd, vbHide
    
    MsgBox "PowerShellスクリプトを呼び出しました!"
End Sub
VB
  • ポイント:
    • -File オプションで .ps1 ファイルを実行。
    • -ExecutionPolicy Bypass を付けると制限を回避できる(社内規定に注意)。

テンプレ4:PowerShell結果を直接VBAで受け取る(WScript.Shell)

Sub Call_PowerShell_GetResult()
    Dim wsh As Object
    Dim execObj As Object
    Dim output As String
    
    Set wsh = CreateObject("WScript.Shell")
    
    ' PowerShellでコンピュータ名を取得
    Set execObj = wsh.Exec("powershell -command ""$env:COMPUTERNAME""")
    
    ' 標準出力を読み込む
    output = execObj.StdOut.ReadAll
    
    MsgBox "コンピュータ名: " & output
End Sub
VB
  • ポイント:
    • WScript.Shell.Exec を使うと標準出力を直接取得できる。
    • Excelに結果を取り込むのに便利。

例題で練習

'例1:PowerShellで日時を表示
'例2:PowerShellでファイル一覧を取得しExcelに展開
'例3:PowerShellスクリプトファイルを呼び出す
'例4:PowerShellの結果を直接Excelに取り込む
VB

初心者向けポイント

  • ShellでPowerShellを呼び出すのが基本
  • 結果をファイルに出力 → Excelで読み込む のが分かりやすい
  • WScript.Shell.Execで直接結果を取得できる
  • スクリプトファイルを呼び出すと複雑な処理も可能
  • Excelを「PowerShellのフロント」として活用できる

👉 この「外部連携 × PowerShell呼び出しテンプレ」を覚えておけば、Excel VBAで Windows機能や外部処理をPowerShell経由で呼び出し、結果をExcelに展開する処理 を簡単に作成できます。

タイトルとURLをコピーしました