Excel(エクセル)【12】マクロにおけるオブジェクトの基礎
Excel(エクセル)のマクロを書く時、オブジェクトについて理解する必要があります。オブジェクトとは、マクロの処理が適用される対象のことです。オブジェクトを理解しなければ、VBAを思い通りに動かすことはできません。記事では、オブジェクトの基礎について解説します。
Excel(エクセル)マクロのオブジェクトとは
オブジェクトは概念であり、具体的にこれと決まったものはありません。たとえば「セルを塗りつぶす」というVBAを書いた時、オブジェクトはセルです。
このように、オブジェクトの対象はセルであったり、ワークシートであったり、その都度変化します。ちなみにVBAでセルを指定する時「Range」と記述します。ブックの場合は「Workbook」、ワークシートの場合は「Worksheet」です。
Sub セルに色を塗る()
Worksheets("Sheet1").Range("A1:B2").Interior.Color = RGB(200, 200, 200) '色を塗ります
End Sub
上記の例では「Sheet1」という名前のワークシートの「A1:B2」範囲のセルというオブジェクトを指定しているのです。ただし、「Sheet1」というワークシートがアクティブ状態の場合、下記のように記述を省略できます。
Sub セルに色を塗る()
Range("A1:B2").Interior.Color = RGB(200, 200, 200) '色を塗ります
End Sub
オブジェクトの階層構造を理解しよう
Excel(エクセル)マクロのVBAでは、オブジェクトは階層構造として理解します。まず最上位にExcel(Application)、次にブック(Workbooks)、次にワークシート(Worksheets)、最後にセル(Range)です。
先述したように、オブジェクトの記入は、処理対象がアクティブ状態であれば記述を省略できます。たとえばExcel(Application)は事実上、省略します。一方、オブジェクトを続けて記述する場合は「.(ピリオド)」でつなげてください。
複雑なマクロであるほど、ブックやワークシートを行き交った処理を記述します。その際、正確に処理対象となるオブジェクトを指定するためにも正しく書かなくてはなりません。
オブジェクトの記述を省略する
「Worksheets(“Sheet1”)」のようにオブジェクト名を記述することで処理対象を指定できます。一方、インデックス番号を利用することで、対象オブジェクトの記述を省略することが可能です。
たとえば、Excel(エクセル)のシートが「Sheet1」「Sheet2」「Sheet3」と並んでいた場合、右端の「Sheet3」を指定するには「Worksheets(3)」とだけ記述します。この際、「”(ダブルクオーテーションマーク)」で囲む必要もありません。
Sub セルに色を塗る()
Worksheets(3).Range("A1:B2").Interior.Color = RGB(200, 200, 200) '色を塗ります
End Sub
もし、「Sheet3」「Sheet1」「Sheet2」とワークシートを並べ替えた場合、上記のようにVBAを記述すると「Sheet2」が処理対象です。あくまでもワークシートの並び順が左から何番目か、と言う基準で判断されるのであって、ワークシートの名称は関係ありません。
インデックス番号はブック(Workbooks)にも適用されます。この場合、最初に開いたブックから順番にカウントされるのです。
まとめ
Excel(エクセル)のマクロを学ぶにはオブジェクトの概念を理解する必要があります。オブジェクトを理解できれば正確に処理の対象を指定できるからです。まずは基本的な知識から身につけましょう。