次の方法で共有


Office Space: Excel ワークブックでワークシートを切り替える

Office Space

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

Excel ワークブックでワークシートを切り替える

スクリプトを使用して作成した場合でも、Excel の [ファイル] メニューの [新規作成] をクリックして作成した場合でも、新しい Excel ワークブックには、既定で 3 つのワークシートが含まれています。Excel を使って手動で作業しているときにワークシートを切り替えるには、目的のワークシートのタブをクリックするだけで簡単に行うことができます。それでは、スクリプトを使用して別のワークシートにアクセスして作業するにはどうすればよいでしょうか。

これは、Excel でワークシートのタブをクリックすることを、プログラムを使用して行うということです。詳しく説明する前に、まずは、次の初歩的な Excel スクリプトを見てください。このスクリプトは、新しいワークブックを作成し、最初のワークシート (Sheet1) のセル A1 に文字 A を入力します。

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = TRUE
objExcel.Workbooks.Add

Set objWorksheet = objExcel.Worksheets(1)

objWorksheet.Cells(1, 1).Value = "A"

別のワークシートにアクセスするための鍵は、次のコード行にあります。この行は、ワークシート オブジェクトへの参照を作成します。

Set objWorksheet = objExcel.Worksheets(1)

かっこ内の数値 1 は、ワークブックの最初のワークシートを使って作業することをスクリプトに指示しているだけです。それでは、ワークブックの 2 番目のワークシート (Sheet2) を使って作業するにはどうすればよいでしょうか。ずるいですね、先に答えを見てしまいましたね。そう、正解です。ワークシート番号の 2 を参照するだけです。スクリプトは次のようになります。

Set objWorksheet = objExcel.Worksheets(2)

通常は、記述しなければならないのはこれだけですが、新しいワークシートをアクティブにするコード行を追加することをお勧めします。Excel のスクリプトを作成してちょっと遊んでいたときに、ワークシートをアクティブにしなくてもデータが書き込めることを発見しました。ただし、手の込んだ書式設定をしようとしたり、セルにデータを書き込む以上の複雑なことをしようとしたりすると、エラーが発生することがあります。ワークシート 2 をアクティブにすることで、このような問題が解決できます。

次のサンプル スクリプトは、新しいワークブックを追加し、ワークシート 2 へのオブジェクト参照を作成して、ワークシート 2 をアクティブにしてから、ワークシート 2 のセル A1 に文字 A を入力します。このスクリプトは、正常に動作します。

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = TRUE
objExcel.Workbooks.Add

Set objWorksheet = objExcel.Worksheets(2)
objWorksheet.Activate

objWorksheet.Cells(1, 1).Value = "A"

To switch back to sheet 1, toss in these two lines of code:

Set objWorksheet = objExcel.Worksheets(1)
objWorksheet.Activate

上のサンプルは正常に動作しますが、コードに少し不自然な部分があります。ワークブック内に 1 年の 12 か月に対応する 12 枚のワークシートがある場合を考えてみてください。次のようなコードを使うと、8 月のワークシートを参照することができます。

Set objWorksheet = objExcel.Worksheets(8)

これでもよいのですが、ワークシートを番号ではなく名前で参照できたら、スクリプトがさらに読みやすく、デバッグもしやすくなります。たとえば、ワークシートが暦年ではなく会計年度で整理されている場合などは特にそうです。会計年度と暦年が一致していない状況で、会計年度について話しているときに 2 月に割り当てられている月番号をすぐに言える人がいるでしょうか。便利なことに、ワークシートは番号でも名前でも参照することができます。次のコード行は、August という名前のワークシートを参照します。

Set objWorksheet = objExcel.Worksheets("August")

この方がわかりやすいですよね。名前は必ず二重引用符で囲んでください。汎用的なサンプルが必要であれば、自分で試してみてください。次のサンプル スクリプトは、先ほどのスクリプトとは別のものですが、同じように、新しいワークブックを追加し、ワークシート 2 へのオブジェクト参照を作成して、ワークシート 2 をアクティブにしてから、ワークシート 2 のセル A1 に文字 A を入力します。1 か所だけ違いがありますが、わかりますか。このスクリプトは、ワークシート番号の 2 ではなく Sheet2 を参照します。

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = TRUE
objExcel.Workbooks.Add

Set objWorksheet = objExcel.Worksheets("Sheet2")
objWorksheet.Activate

objWorksheet.Cells(1, 1).Value = "A"