オブジェクトの階層構造
VBAのオブジェクトは階層構造になっています。
Rangeに値を代入するコードを例にオブジェクトの階層構造を学んでいきましょう。
セルA1に数字を代入するコードは以下のように書きます。
Range("A1").Value = 111
ただし、セルA1は複数のシートに存在します。どのシートのセルA1かを正確に示すために以下のように記述します。
Worksheets(1).Range("A1").Value = 111
シートを指定できましたが、複数のブックを開いている場合は、どのブックかを指定する必要があります。
Workbooks(1).Worksheets(1).Range("A1").Value = 111
VBAでは複数の単語を「.(コロン)」でつなぐケースが多いですが、以下の2通りのVBAの構文の通り、最後の単語は基本的に「プロパティ」もしくは「メソッド」となります。
※「基本的に」と記載したのは、プロパティが省略されていることなどがあるためです。
<VBAの構文>
- オブジェクト.プロパティ = 値
- オブジェクト.メソッド [オプション:=引数]
「.」でつながれた最後の単語はプロパティ、メソッドになることが多い。
他人が記述したVBAのコードを調査するときに長文のコードがあったとしても、最後の単語がプロパティかメソッドであることが多いと考えて読むと分かりやすいです。
オブジェクトの省略
セルを指定する際に、毎回ワークブック、ワークシートを指定するのは面倒です。VBAでは、上位オブジェクトの省略をことができます。ただし、オブジェクトを省略したときには、どのモジュールにコード記述しているかによって、指定されるブック、シートが異なることに注意しましょう。
この部分は重要ですので、しっかりと理解しましょう。
標準モジュールに記述した場合
標準モジュールは特定のワークシートなどに関連づけられていない汎用モジュールです。標準モジュールでブック・シートを省略した場合は、アクティブブックのアクティブシートが指定されます。
シートモジュールに記述した場合
シートモジュールはワークシート「Sheet1」「Sheet2」など特定のシートに属するモジュールです。シートモジュールでブック、シートを省略した場合はそのシートモジュールが属するシートが指定されます。
※Sheet1のモジュールに記述した場合は、Sheet1が指定されます。
ブックモジュールに記述した場合
ブックモジュール(ThisWorkbook)は、「Book1」「Book2」など特定のシートに属するモジュールです。
ブックモジュールでブックを省略した場合は、そのブックモジュールが属するブックを指定します。
ブックモジュールでブックおよびワークシートを省略した場合は、アクティブシートを指定します。
UserFormに記述した場合
UserFormはユーザが独自に設計できるダイアログボックスです。
UserFormのモジュールでブック、ワークシートを省略した場合は、標準モジュール同様にアクティブブックのアクティブシートを指定します。
※注意:オブジェクトによっては、上位オブジェクトを省略できない場合があります。