外部連携 × PowerShell呼び出し
Excel VBAから PowerShellスクリプトを呼び出す ことで、Windowsの機能や外部処理を連携できます。
例えば「ファイル操作」「外部API呼び出し」「システム情報取得」などをPowerShellに任せ、結果をExcelに取り込むことが可能です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- PowerShell呼び出しの流れ
- VBAから
ShellやWScript.Shellを使ってPowerShellを起動 - PowerShellにコマンドやスクリプトを渡す
- 結果をファイルや標準出力で受け取り、Excelに展開
- VBAから
- 用途例:
- 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でテキストを読み込んでシートに展開。
- PowerShellの結果を
テンプレ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に展開する処理 を簡単に作成できます。
