
TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。
詳細情報
| • | |
| • | |
| • |
![]()
Scripting Guy さん、よろしくお願いします。Windows PowerShell を使用して Microsoft Excel を自動化する方法はありますか。
-- MW

MW さん、こんにちは。はい、本当です。2006 年 11 月 6 〜 10 日の週は、TechNet の Windows PowerShell 週間です。Windows PowerShell を紹介するために計画された一連の Webcast (月曜日から金曜日まで毎日 1 回) を、Scripting Guys が発表していきます。現時点ではこれ以上詳しいことはわかりませんが (今後随時お知らせします)、Windows PowerShell を使用してさまざまな種類の便利なシステム管理タスクを実行する方法を紹介するので、楽しくて興奮に満ちた 1 週間になることは間違いありません。
どういうことでしょう。常に Windows PowerShell について夢見ていると考えれば、念願の夢がかなったような気分になります。それでいいんです。あれこれ考えてみると、何について常に夢見ているのかは、どちらかというと知りたくありません。
注 : Scripting Guys は何について夢見ていると思いますか。驚くことに、Scripting Guys はだれ一人として夢を見ないのです。いや、でも、それほど驚くことではないかもしれません。というのも、Microsoft で働くことが、夢を生きているようなものだからです。 だいたいですが。 |
さて、MW さん。Windows PowerShell を使用して Microsoft Excel を自動化する方法を紹介するのを、11 月までお待ちいただけますでしょうか。実を言うと、元の計画ではそのつもりでした。でも、そうなると、もっと多くの電子メールを読み、回答する別の質問を選び出し、というように、言うまでもなく大変な作業になることに気付きました。Windows PowerShell を使用して Microsoft Excel を自動化するサンプル スクリプトを記述することがいかに簡単かを考えると、余計に大変に感じます。
$a = New-Object -comobject Excel.Application
$a.Visible = $True
$b = $a.Workbooks.Add()
$c = $b.Worksheets.Item(1)
$c.Cells.Item(1,1) = "A value in cell A1."
$b.SaveAs("C:\Scripts\Test.xls")
$a.Quit()
このスクリプトの鍵は、先頭行にあります。New-Object Cmdlet を使用して Microsoft Excel のインスタンスを作成する行です。New-Object に 2 つの項目を渡す必要があることに注意してください。1 つは、(新しい .NET Framework オブジェクトではなく) 新しい COM オブジェクトを作成することを Cmdlet に伝える –comobject パラメータです。もう 1 つは、作成するオブジェクトの ProgID である Excel.Application です。間違いではありません (少なくともここでは)。ProgID を二重引用符で囲む必要はありません。
なぜ人々が Windows PowerShell についてとても興奮していたのか不思議に思うでしょう。
実際、1 行目は VBScript の次のコード行に相当します。
Set a = CreateObject("Excel.Application")
これらの行は、機能的には等価ですが、注意すべき相違点がいくつかあります。1 つは、Windows PowerShell では、オブジェクト参照を作成するために Set キーワード (またはそれに相当するもの) を使用する必要はありません。もう 1 つは、$a のような変数名を使用する必要があります。Windows PowerShell では、変数名はドル記号 ($) で始まる必要があります。
小さなことですが、知っておく必要があります。
では、スクリプトに戻ります。次の行では、Excel の Visible プロパティを true に設定します。これにより、アプリケーションを画面上に表示できます。
$a.Visible = $True
これにはある程度見覚えがあるはずです。VBScript と同様に、Windows PowerShell でも "ドット" 表記を使用してプロパティ値を設定します。ここで唯一異なる点は、Visible プロパティを $True に設定する点です。組み込み変数の前には、ドル記号を付けます。変数名にはドル記号を付ける必要があると説明したのを覚えていますか。そのように説明したのには理由があります。
考えてみると、このコラムで何かを言うための正当な理由があったのは、これが初めてかもしれません。
次の 2 行のコードに移りましょう。ここでは、Add メソッドを使用して Excel のインスタンスに新しいブックを追加し、Item プロパティを使用してブックの最初のワークシートへのオブジェクト参照を作成します。
$b = $a.Workbooks.Add() $c = $b.Worksheets.Item(1)
この点によく注目してくれました。2 行目は、VBScript で見るものとは少し異なりますよね。VBScript では、次のようなコードを使用してワークシート 1 へのオブジェクト参照を作成します。
Set c = b.Worksheets(1)
こちらも非常に簡単です。ワークシート 1 が必要なので、”Worksheets(1)” を指定します。ではなぜ、Windows PowerShell ではワークシート 1 を "Worksheets.Item(1)" とするのでしょうか。
実は、Item プロパティは Worksheet オブジェクトの既定のプロパティです。VBScript では、通常、既定のプロパティを明示的に参照しなくても続行できます。プロパティ名を指定しないと、既定のプロパティが使用されます。しかし、それは Windows PowerShell には当てはまりません。既定のプロパティを省略し、次のようなコードを使用して、オブジェクト参照を作成するとします。
$c = $b.Worksheets(1)
この場合、何が行われるでしょうか。次のコード行をご覧ください。
Method invocation failed because [System.__ComObject] doesn't contain a method named 'Worksheets'.
つまり、既定のプロパティで操作するときでも、常にプロパティ名を含めるようにします。
注 : 興味深いことに、VBScript では、どの方法でもこれを実行できます。既定のプロパティ名を省略しますか。それも可能です。しかし、既定のプロパティ名を参照したい場合はどうでしょうか。その場合には、そうすればいいんです。VBScript では、次のようなコードも正常に機能します。 Set c = b.Worksheets.Item(1) |
次の 2 行のコードは、アプリケーションが一度起動され実行されたら、実際には Excel でどのように処理が行われるかを示します。1 行目では、セル A1 (行 1、列 1) にテキストを追加します。ワークシートのセルで操作するときは、明示的に Item プロパティを参照することに再度注意します。セル A1 を変更した後、SaveAs メソッドを呼び出し、スプレッドシートを C:\Scripts\Test.xls として保存します。
$c.Cells.Item(1,1) = "A value in cell A1."
$b.SaveAs("C:\Scripts\Test.xls")
メソッドと言えば、Windows PowerShell でメソッドを呼び出すときは必ず、最後にかっこを含める必要があります。かっこが空であっても同様です。たとえば、VBScript では、次のようなコードを使用して Save メソッドを呼び出すことができます。
b.Save
しかし、これは Windows PowerShell ではあまり役に立ちません。代わりに、メソッドを使用することを Windows PowerShell に伝えるかっこのセットを追加する必要があります。
$b.Save()
ええ、そうです。しかし、すぐに慣れるでしょう。
スプレッドシートを保存した後、Quit メソッド (再びかっこがあります) を呼び出したら終了です。
$a.Quit()
MW さん、これで開始できると思います。他の皆さんに関しては、主に Windows PowerShell について聞いたこともないという理由で今日のコラムを少しわかりにくく感じた場合は、Windows PowerShell センターを参照してください。ところで、2006 年 11 月 6 〜 10 日が Windows PowerShell 週間であることはお伝えしたでしょうか。おそらくお伝えしたでしょう。これら 5 つの Webcast では、間違いなく、Windows PowerShell の長所が示されるでしょう。とはいえ、Windows PowerShell は真新しいため、実際にはまだそれほど多くのことは行われていませんが。しかし、私たちの言いたいことはわかっていただけたと思います。