前回は数字や文字を代入して使える変数について学びました。
実は変数にはオブジェクトを代入することもできます。オブジェクトを代入できる変数を特別に「オブジェクト変数」と呼びます。
オブジェクト変数の変数宣言
変数宣言は以下のような形で行いました。
Dim 変数名 As 変数に入れたいデータの種類
オブジェクト変数の宣言もこの形に倣います。
固有オブジェクト型
オブジェクト変数を使うときは、「変数に入れたいデータの種類」のところに「オブジェクトの名前」を直接入力します。
例えば、Rangeオブジェクトを代入するオブジェクト変数rngは次のように宣言します。
Dim rng As Range
総称オブジェクト型
オブジェクト変数を宣言するとき、オブジェクトの名前を1つ1つ設定するのではなく「オブジェクト」という1つのまとまりで型を作ることもできます。
Dim rng As Object
この変数宣言方法を総称オブジェクト型と言います。総称オブジェクト型を使って宣言された変数にはすべてのオブジェクトを代入することができます。



総称オブジェクト型はオブジェクト型を考えずに使うことができるため、楽ではあります。一方で、固有オブジェクト型では予期しないオブジェクトが代入されるのを防ぐことができるというメリットがあります。
オブジェクト変数を使うとき
変数には、=を使って中身を代入することができました。
Dim i As Long
i = 5
i = i + 100
オブジェクト変数に中身を代入する際は、=だけでなくSetというキーワードが必要です。
Dim rng As Range
Set rng = Range("A1")
オブジェクト変数を使うメリット
プログラミングの対象であるオブジェクトは、階層構造で指定して命令対象を明確にする必要がありました。
しかし、オブジェクトの階層構造を毎回指定するのは骨が折れます。また以下の画像のようにコードが冗長になり、大変見づらくなります。



そこで、オブジェクト変数を使ってよく使うオブジェクトを格納しておく方法をとります。
例えば、オブジェクト対象のシートを以下のように変数Aに代入してみましょう。
Dim A As Worksheet
Set A = Workbooks("A支店売上.xlsm").Worksheets("1月")
下の画像は、前述の画像と同じプログラムです。見た目がすっきりし、プログラムを書く労力も少なくて済むのが分かるかと思います。



オブジェクト変数に対しても、プロパティやメソッドは同じように使えます。



コメント