次の方法で共有


Office Space: Excel スプレッドシートに数式を挿入する

Office Space

Office Space へようこそ。Office Space は、Microsoft® Office アプリケーションのスクリプト作成に関するヒントとテクニックを紹介する新しいコラムです。過去のヒントについては、Office Space アーカイブを参照してください。Microsoft Office でのスクリプト作成について質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

Excel スプレッドシートに数式を挿入する

Scripting Guys の 1 人が大学で働いていたときに、その大学の管理スタッフが毎月の予算報告書を Excel で作成していました。彼女は、すべての情報を忠実に入力してから、計算機を取り出して、すべての数字を加算していました。簡単な数式を作成すれば、後の計算は Excel に任せることができると教えると、彼女は呆然としていたそうです。彼女は、Excel にそのような機能があることを知らなかったのです。

メモ   ちなみに、彼女は、PowerPoint を数か月に 1 度しか使っていませんでした。そして、プレゼンテーションを作成しなければならなくなると、「PowerPoint をしばらく使ってなかったのですが、まだ動作しますか。」と電話で質問してきました。

このような経験をしたのは彼女くらいでしょう。今では、だれもが Excel に計算機能があることを知っています。ただし、プログラムを使ってスプレッドシートに数式を挿入する方法は、知らないかもしれません。皆さんにとって、今日は、まさにラッキー デイですね。このコラムを読み終えるまでに、この方法も知ることになります。

おそらく、プログラムを使ってスプレッドシートに数式を挿入する方法が実に簡単だということに驚くでしょう。たとえば、次の簡単なスクリプトは、Excel のインスタンスを作成し、A1、A2、A3、および A4 の各セルに数値を入力します。そして、A6、A7、A8、および A9 の各セルには、それぞれ、4 つの数値の合計、一番小さい数値 (最小値)、一番大きい数値 (最大値)、そして 4 つの数値の平均を求める数式を挿入します。

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)

objExcel.Cells(1, 1).Value = 11
objExcel.Cells(2, 1).Value = 54
objExcel.Cells(3, 1).Value = 32
objExcel.Cells(4, 1).Value = 55

objExcel.Cells(6, 1).Formula = "=SUM(A1:A4)"
objExcel.Cells(7, 1).Formula = "=MIN(A1:A4)"
objExcel.Cells(8, 1).Formula = "=MAX(A1:A4)"
objExcel.Cells(9, 1).Formula = "=AVERAGE(A1:A4)"

ご覧のように、スクリプトによる数式の追加は、手動で数式を追加する場合とよく似ています。Excel にキーボードから入力しているときに数式を追加するには、セルをクリックして数式を入力するだけですね。

=SUM(A1:A4)

スクリプトを記述する場合もこれとほとんど同じことをします。目的のセルを選択して、Formula プロパティの値を、手動で入力する数式と同じ数式に設定します。セル A6 に数式を挿入するには、次のようなコードを使用します。

objExcel.Cells(6, 1).Formula = "=SUM(A1:A4)"

とても簡単ですね。最終結果は下の図のようになります。

Excel スプレッドシート

ちなみに、特定のセルに数式が入力されているかどうかを調べる場合は、そのセルを表す Range オブジェクトを作成し、HasFormula プロパティの値をチェックすればよいのです。

Set objRange = objExcel.Cells(7, 1)
Wscript.Echo objRange.HasFormula

この場合は、セル A7 に数式が入力されていれば、値として True (-1) が返され、入力されていなければ、値として False (0) が返されます。

ここで別のちょっとしたヒントを紹介します。数式は、セルのアドレスが A1 のような形式で示されることを前提としていますが、ユーザーは、通常、(1, 7) のような行列形式を使って値と数式を代入します。次のコードは、指定したセルの A1 スタイルのアドレスを取得するための方法の 1 つです。

Set objRange = objExcel.Cells(7, 1)
Wscript.Echo objRange.Address(False, False)

このコードの意味がすべてわかりますか。これで今回のコラムは終了です。セルのアドレスについては、次回以降のコラムで紹介します。