PR

 前回は、目次シートを作るマクロを取り上げ、おおよそのマクロ実行イメージをつかんでいただきました。今回からは、このマクロを構成しているコードの内容を理解していきましょう。

 今回のポイントは、個々のワークシートとワークシート全体の関係を理解すること、そして、その考え方をベースに、新規シートを追加する命令を通じて具体的なコードの記述の仕方を覚えることです。合わせて、VBAで欠かせない「オブジェクト」と「コレクション」という概念も覚えてください。

 なお、マクロ全体のコードは、本連載の記事末に掲載してありますので参考にしてください。

Worksheetはワークシートを扱うオブジェクト

 本連載の第12回では、シートを移動するための構文が登場しました(図1)。対象となるシートに対しMoveという命令を記述すれば、シートを好きな位置に動かすことのできる構文です。Excel VBAで単体のシートは、「Worksheet」というオブジェクトで表現されます。ですから、先ほどの移動の例で言えば「Worksheet.Move」と記述すればいいように思えます。確かに、Worksheetはシートを表しているのですが、ただWorksheetと書いただけではどのシートなのか特定ができません。ブックには通常何枚ものシートが存在していますので、複数のシートの中でどのシートを指しているのかをきちんと指定する必要があるのです。

14-1.jpg
図1 第12回でも登場したシートを移動する構文

 Excel VBAでは、1枚以上のシートが集まった集合体を「Worksheets」という概念でとらえています。Worksheetsは、複数のWorksheetオブジェクトが束ねられたもので、このように同じオブジェクトが複数集まったものを「コレクション」と呼んでいます。たとえば、今、ブックに4枚のシートがあった場合、1枚目から4枚目までの各シートを特定するには、「Worksheets(1)」「Worksheets(2)」「Worksheets(3)」「Worksheets(4)」といった具合に、コレクションの後ろにカッコと番号の組み合わせで表現します(図2)。例えば「Worksheets(1)」であれば、Worksheetsというシートの集合体の中で1番目に存在しているシートという意味です。

14-2.jpg
図2 Worksheetオブジェクトを束ねたものがWorksheetsコレクション。カッコの中の数字はインデックス番号と呼ばれる

 具体的な例でお話しすると、4枚目のシートを1枚目の先頭シートのすぐ後ろに移動したい場合には、図3のように記述すればいいことになります。

14-3.jpg
図3 4枚目のシートを1枚目の後ろの位置に移動する