オブジェクト変数を使おう

基礎から始めるVBAVBA

前回は数字や文字を代入して使える変数について学びました。

実は変数にはオブジェクトを代入することもできます。オブジェクトを代入できる変数を特別に「オブジェクト変数」と呼びます。

前回記事はこちら

オブジェクト変数の変数宣言

変数宣言は以下のような形で行いました。

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月")

下の画像は、前述の画像と同じプログラムです。見た目がすっきりし、プログラムを書く労力も少なくて済むのが分かるかと思います。

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

コメント

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