目次:
ビデオ: Excel塾のエクセルマクロ講座入門編21回 標準モジュールの挿入と解放、オブジェクト、プロパティ、メソッド 2024
オブジェクトの参照方法を知ることは重要ですが、オブジェクトを参照するだけでExcel VBAプログラミングを行うことはできません。意味のあるものを実現するには、次の2つのうちのいずれかを実行する必要があります。
-
オブジェクトの プロパティを読み取ったり変更したりします。
-
オブジェクトで使用するアクションの メソッド を指定します。
文字通り何千ものプロパティとメソッドが利用可能で、簡単に圧倒されることがあります。利用可能なプロパティとメソッドのほとんどを使用する必要はありません。
<! - 1 - >オブジェクトのプロパティ
すべてのオブジェクトにプロパティがあります。 プロパティ は、オブジェクトを記述する属性と考えることができます。オブジェクトのプロパティは、どのように表示され、どのように動作し、表示されるかどうかを決定します。 VBAを使用すると、オブジェクトのプロパティで2つのことを実行できます。
-
プロパティの現在の設定を調べます。
-
プロパティの設定を変更します。
たとえば、単一セルRangeオブジェクトにValueというプロパティがあります。 Valueプロパティは、セルに含まれる値を格納します。 VBAコードを記述してValueプロパティを表示したり、VBAコードを記述してValueプロパティを特定の値に設定することができます。次のマクロは、VBA組み込みのMsgBox関数を使用して、アクティブブックのSheet1のA1セルの値を表示するボックスを表示します。
<! - 3 - > このメッセージボックスには、RangeオブジェクトのValueプロパティが表示されます。Sub ShowValue()Contents =ワークシート( "Sheet1")。範囲( "A1")。 Value MsgBox Contents End Sub
ところで、MsgBoxは非常に便利な関数です。 Excelを使用してVBAコードを実行しているときに結果を表示することができます。
上の例のコードは、セルのValueプロパティの現在の設定を表示します。そのプロパティの設定を変更したい場合はどうすればよいですか?次のマクロは、セルのValueプロパティを変更して、セルA1の値を変更します。
Sub ChangeValue()Worksheets( "Sheet1")。範囲( "A1")。 Value = 994. 92 End Sub
Excelがこのプロシージャを実行すると、アクティブブックのSheet1のA1に値994が格納されます。92.アクティブブックにSheet1という名前のシートがない場合、そのマクロの実行結果はエラーメッセージ。 VBAは指示に従うだけで、存在しないシートでは機能しません。
各オブジェクトには独自のプロパティセットがありますが、いくつかのプロパティは多くのオブジェクトに共通です。たとえば、多くのオブジェクト(すべてではありません)にはVisibleプロパティがあります。ほとんどのオブジェクトにはNameプロパティもあります。
一部のオブジェクトプロパティは読み取り専用プロパティです。つまり、コードでプロパティの値を取得できますが、変更できません。
コレクションもオブジェクトです。つまり、コレクションにもプロパティがあります。たとえば、ワークブックコレクションのCountプロパティにアクセスすることで、開いているワークブックの数を特定できます。次のVBAプロシージャは、開いているワークブックの数を示すメッセージボックスを表示します。
Sub CountBooks()MsgBoxワークブック。 Count End Sub
オブジェクトメソッド
プロパティに加えて、オブジェクトにはメソッドがあります。 メソッド はオブジェクトで実行するアクションです。メソッドは、オブジェクトのプロパティを変更したり、オブジェクトに何かをさせることができます。
この単純な例では、RangeオブジェクトのClearContentsメソッドを使用して、アクティブシート上の12セルの内容を消去します。
Sub ClearRange()Range( "A1:A12")。 ClearContents End Sub
一部のメソッドは、1つ以上の引数をとります。 引数 は、実行するアクションをさらに指定する値です。メソッドの後にメソッドの引数をスペースで区切ります。複数の引数はコンマで区切られます。
次の例では、(アクティブブック内の)Sheet1をアクティブにし、RangeオブジェクトのCopyメソッドを使用してセルA1の内容をセルB1にコピーします。この例では、Copyメソッドにコピー操作の宛先範囲である1つの引数があります。
Sub CopyOne()Worksheets( "Sheet1")。有効範囲( "A1")。 Copy Range( "B1")End Sub
Rangeオブジェクトが参照されたときにワークシート参照が省略されていることに注意してください。 Sheet1をアクティブにするステートメントが使用されたため、これは安全に実行できます。 (Activateメソッドを使用して)。
メソッドの引数を指定するもう1つの方法は、引数の正式名の後にコロンと等号を続けて使用することです。名前付き引数の使用はオプションですが、そうすることでコードを理解しやすくすることができます。 CopyOneプロシージャの2番目の文は、
Range( "A1")のように記述できます。コピー先:=範囲( "B1")
ステートメントが入力されているときに少しプロンプトが表示されます。そのプロンプトは引数の正式な名前を示しています。
VBEは入力中に引数のリストを表示します。コレクションもオブジェクトであるため、コレクションにはメソッドがあります。次のマクロは、ワークブックコレクションのAddメソッドを使用します。
Sub AddAWorkbook()Workbooks。 Add End Sub
期待どおり、このステートメントは新しいブックを作成します。つまり、新しいブックをワークブックコレクションに追加します。このマクロを実行すると、新しいブックがアクティブなブックになります。
オブジェクトイベント
あなたが知る必要があるもう1つのトピック、イベントがあります。オブジェクトは、発生するさまざまな イベント に応答します。たとえば、Excelで作業しているときに別のブックをアクティブにすると、ブックのアクティブ化イベントが発生します。たとえば、特定のWorkbookオブジェクトに対してActivateイベントが発生するたびに実行されるように設計されたVBAマクロを作成できます。
Excelは多くのイベントをサポートしますが、すべてのオブジェクトがすべてのイベントに応答するわけではありません。また、一部のオブジェクトはどのイベントにも応答しません。使用できる唯一のイベントは、Microsoft Excelのプログラマーが利用できるイベントです。