この記事では、PowerShellからExcelVBAのマクロを呼び出す方法についてご説明します。
【動画】PowerShellからExcelVBAのマクロを呼び出す実際の動き
本題に入る前に、まずは次の動画をご覧ください。
Excelアプリケーションのインスタンスを生成し、Excelファイルを開きます。
Excelファイルを開いたらマクロを実行しています。
コードの流れ
Excelファイルのマクロの例
今回は下のExcelファイルのマクロを用意しました。
Option Explicit Sub test() MsgBox "テスト" End Sub
Sheet1のシートモジュールにあるtestサブルーチン内にメッセージボックスを表示させるコードが存在しています。
PowerShellのコードを実行すると、以下の通りにメッセージボックスが出力されました。
PowerShellのコード(例)
# Excelアプリケーションのインスタンスを生成する $excel = New-Object -ComObject Excel.Application # モジュール名を取得する $mdlNM = "Sheet1" # サブルーチン名を取得する $sbrNM = "test" # Excelファイルのフルパスを取得する $excelFile = "C:\work\10_勉強\18_PowerShell\0029\0029.xlsm" # Excelファイルを開く $workbook = $excel.Workbooks.Open($excelFile) # マクロを実行する $excel.Run($mdlNM + "." + $sbrNM) # Excelファイル閉じる $workbook.Close() # Excelアプリケーションを閉じる $excel.Quit() # COMオブジェクトへの参照を解放する [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null # Excelアプリケーションオブジェクトを参照する変数excelを削除する Remove-Variable excel
注目すべきコード①
最初に見て頂きたいのは2行目です。
# Excelアプリケーションのインスタンスを生成する $excel = New-Object -ComObject Excel.Application
コードの説明
以上のコードは、Excelアプリケーションのインスタンスを生成することでExcelファイルを開いたり、マクロを閉じるなどの操作が可能になります。
注目すべきコード③
次に見て頂きたいのは5行目から11行目です。
# モジュール名を取得する $mdlNM = "Sheet1" # サブルーチン名を取得する $sbrNM = "test" # Excelファイルのフルパスを取得する $excelFile = "C:\work\10_勉強\18_PowerShell\0029\0029.xlsm"
コードの説明
以上のコードは、マクロが含まれるExcelファイルのフルパス、モジュール名、サブルーチン名を取得する処理のコードです。
注目すべきコード④
次に見て頂きたいのは14行目です。
# Excelファイルを開く $workbook = $excel.Workbooks.Open($excelFile)
コードの説明
以上のコードは、Excelファイルを開く処理のコードです。
OpenメソッドにExcelファイルのフルパスを指定して実行するとExcelファイルが開きます。
注目すべきコード⑤
次に見て頂きたいのは17行目です。
# マクロを実行する $excel.Run($mdlNM + "." + $sbrNM)
コードの説明
以上のコードは、マクロを実行する処理のコードです。
Runメソッドの引数に「モジュール名」+「.」+「サブルーチン名」(例:Sheet1.test)のとおりに指定して実行することでマクロが実行されます。
注目すべきコード⑥
次に見て頂きたいのは20行目から23行目です。
# Excelファイル閉じる $workbook.Close() # Excelアプリケーションを閉じる $excel.Quit()
コードの説明
以上のコードは、Excelファイルを閉じてExcelアプリケーションも閉じる処理のコードです。
注目すべきコード⑦
次に見て頂きたいのは26行目から29行目です。
# COMオブジェクトへの参照を解放する [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null # Excelアプリケーションオブジェクトを参照する変数excelを削除する Remove-Variable excel
コードの説明
以上のコードは、COMオブジェクトへの参照を解放し、Excelアプリケーションオブジェクトを参照する変数excelを削除する処理のコードです。
ReleaseComObjectメソッドの引数にExcelアプリケーションのインスタンスを指定して実行することで、COMオブジェクトへの参照が解放されます。
また、指定された名前の変数を削除するRemove-Variableコマンドレットを実行し、スクリプトの実行中に使用されたメモリリソースを解放します。
動作確認
「Excelファイルのマクロの例」をご覧ください。
最後に
この記事では、C#からExcelVBAのマクロを呼び出す方法についてご説明します。
C#からExcelVBAのマクロを呼び出したい場合は本記事を参考にして頂けたら幸いです。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。