PMPの流儀

我が家の流儀

我が家で気になったことを夫婦で取り上げていきます

MENU

PowerShell から Excel を操作(オートメーション)

PowerShell から、ExcelVBAのように使う事が出来ます。VBAよりも PowerShellが好きって方に紹介します。

Excel をプログラムで操作する

Excelの実体は、COMインターフェースと呼ばれるオブジェクトの集合体から構成されています。COMは、Common Object Model の略で、オブジェクトとして再利用できるモジュールしてOSを拡張できる仕組みです。.Net Framework の前の世代にあたります。
Office 製品は、.Net Framework で作られることは無く、いまだにCOMで作成されています。理由は、速度面が大きいのではないかと思います。COMはC++で実装できるので高速ですが、それに比べて.Net Framework は劣ります。
PowerShellからExcel を操作する事は、PowerShell からCOMインターフェースを介して、Excel を操作するという事です。

サンプルプログラム

Excel を新規作成して保存するまでをPowerShellで書いてみます。

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true

$book = $excel.Workbooks.Add()
$sheet = $book.ActiveSheet
$sheet.Cells.Item(2, 1) = "test"

$excel.SaveAs("C:\temp\test")
$excel.Quit()

1行目のオブジェクトを生成している個所に注目してください。しっかり「ComObject]と書かれていますね。
やってることは VBA と同じです。

PowerShellVBA

さてVBAPowerShell どちらが便利でしょうか。

これはもちろん VBAですね。Excel自身にVBAが埋め込まれているし開発ツールも込みです。
その点 PowerShell は外部から触るわけで、スクリプトを別の名前で付ける必要があります。

PowerShellを使う場面は、PowerShellの機能をつかって色々やりつつ、Excel にアクセスするようなケースです。 私は、VBAの BASIC由来の言語体系が可読性に劣るので、PowerShell をちょっと無理してでも使っています。