[VBA] オブジェクト型変数とSetステートメント

 この記事では VBA の オブジェクト型変数Set ステートメント について解説します。
 

変数のデータ型⑨ オブジェクト型変数

 データ型変数として「オブジェクト型」を宣言すると、その変数はオブジェクト型変数となり、セル範囲やワークシートなどのオブジェクトを格納することができるようになります。実際にオブジェクトをオブジェクト型変数に入れるためには Set ステートメントを記述する必要があります。

固有オブジェクト型

 データ型に WorkBook や WorkSheet, Range など、オブジェクトの種類を特定して宣言された変数を 固有オブジェクト型変数 とよびます。

‘[VBA] セル範囲をRange型に格納するプロシージャ

Sub Object_Test_1()

  Dim myRange As Range

  Set myRange = Range(“B2:D4”)

  myRange.Select

End Sub

 Object_Test_1() では

Dim myRange As Range

によって myRange を Rangeオブジェクト変数として宣言し、

Set myRange = Range(“B2:D4”)

によって B2:D4 範囲のセルを myRange に格納し、

myRange.Select

によって格納されたセル範囲を選択しています。マクロを実行すると下の図のように B2:D4 範囲のセルが選択されます。

 VBAオブジェクト型変数でセル範囲を選択

 固有オブジェクト型でブックを入れる変数を宣言するときは As Workbook, シートを入れる変数を宣言するときは As Worksheet です。オブジェクト型変数を使用することの最大の利点は、オブジェクトの煩雑な記述の代わりに簡単な変数名で代用できるようになることです。またマクロ全体がすっきりと読みやすくなります。
 

総称オブジェクト型

 Workbook, Worksheet, Range のように種類を区別するのが面倒な場合は、代わりに Object という名称でオブジェクト型変数を宣言することができます。

‘[VBA] 総称オブジェクト型変数にセル範囲を格納するプロシージャ

Sub Object_Test_2()

  Dim myRange As Object

  Set myRange = Range(“B2:D4”)

  myRange.Select

End Sub

 Object_Test_2() の動作は Object_Test_1() と同じです。このようにオブジェクトの種類を特定せずに Object キーワードで宣言した変数を 総称オブジェクト型変数 とよびます。このような形でマクロを記述しても動作に支障はありませんが、 固有オブジェクト型で記述したほうが「どのようなオブジェクトを入れているのか」ということがひと目でわかるので、少しだけ読みやすくなると思います。

Excel VBA
Excel VBA 表計算とプログラミング学習サイト

コメント

タイトルとURLをコピーしました