アクセス上位ページ
 
最近の更新内容
(3)-f.配列の宣言 ⇐ [PREV]
[NEXT] ⇒ (4).演算子

Excel VBA ≫ 1.基礎編 - 変数と定数(3)-g.オブジェクト変数と Set

オブジェクト変数

オブジェクト(ワークブックやワークシート、セル・レンジなど)への参照を格納しておく変数のことをオブジェクト変数といいます。 オブジェクト変数を使用すると、もとのオブジェクトと同等のプロパティおよびメソッドを使用することが可能になります。 オブジェクト変数はうまく使用することで、コードのメンテナンス性・可読性を向上させることができますので、積極的に使用していきましょう。



オブジェクト変数を使用する主な場面としては次のものが挙げられます。
  • 頻繁に使用するコード記述の長いオブジェクトに別の名前を設定する
  • 頻繁に使用するコード記述の長いオブジェクトは、オブジェクト変数で別名を宣言して使用すると、 コード記述が楽になり、また見やすくもなります。

    例えば "集計データ.xlsx" にある "2013年10月" シートに対してある一連のまとまった処理を行いたい場合、
    Dim DataSheet As Worksheet
    Set DataSheet = Workbooks("集計データ.xlsx").Worksheets("2013年10月")
    DataSheet.Range("A1") = "xxxx"
     ・
     ・
     ・
    
    のようにオブジェクト変数 DataSheet を設定しておくと、後の処理が記述しやすくなります。

  • For Each を使用して、コレクション内のオブジェクトにアクセスする
  • コレクション内の個々のオブジェクトにアクセスするために、オブジェクト変数が必要になります。

    ⇒ For Each を使用してワークシートをすべて表示する例

  • もともと組み込まれていない外部オブジェクトを使用する
  • ファイルシステムオブジェクトやディクショナリオブジェクトなど、 外部オブジェクトライブラリにより提供されるオブジェクトを使用する場合には、 CreateObject 関数でオブジェクトを生成した後、オブジェクト変数へその参照を格納する必要があります。


オブジェクト変数の宣言

オブジェクト変数を使用するには通常の変数を使用するときと同じように、あらかじめ宣言しておく必要があります。 宣言するときの型はオブジェクトの総称である Object 型の他、固有オブジェクトである Worksheet 型や Range 型などが使用できます。 Object 型で宣言するとどんなオブジェクトでもセットできて便利である反面、プログラムのパフォーマンスが落ちるというデメリットがあります。 オブジェクト変数にセットするオブジェクトが決まっている場合は、その固有のオブジェクト型で宣言するようにしましょう。

'総称オブジェクト型で宣言。セル、シートなどすべてのオブジェクトをセットすることが可能。
Dim myObj   As Object

'ワークシート型で宣言。ワークシートオブジェクトのみセットすることが可能。
Dim mySheet As Worksheet

'レンジ型で宣言。レンジオブジェクト(セルオブジェクト)のみセットすることが可能。
Dim myRange As Range



Set ステートメント

オブジェクト変数へオブジェクトの参照を格納するには Set ステートメントを使用します。 あくまで格納するのはオブジェクトへの"参照"であり、オブジェクトそのもののコピーではないことに注意してください。 このため、もとのオブジェクトの値を変更すると、その参照先であるオブジェクト変数の値も変わります。

Dim mySheet As Worksheet                'ワークシート型で宣言

Set mySheet = Worksheets(1)            'ワークシート1(シート名:AAA)をセット
Debug.Print "【前】" & mySheet.Name     'ワークシート名を表示

Worksheets(1).Name = "BBB"              'ワークシート1のシート名を変更
Debug.Print "【後】" & mySheet.Name     'ワークシート名を表示

<実行結果(イミディエイトウィンドウ)>
【前】AAA
【後】BBB


オブジェクト変数にはオブジェクトの参照以外に "Nothing" を代入することができます。 この "Nothing" を代入すると、オブジェクト変数とその参照もとであるオブジェクトの関係が無効になり、 オブジェクト変数に割り当てられているメモリが解放されます。 CreateObject 関数により新規作成したオブジェクトやそれに従属するオブジェクトについては、 使用後に Nothing を代入してメモリを解放するようにしましょう。

Dim fso As Object    'オブジェクト型で宣言
'ファイルシステムオブジェクト生成
Set fso = CreateObject("Scripting.FileSystemObject")
'(何かの処理)
Set fso = Nothing    'オブジェクト変数のクリア

カテゴリ内ページ
Excel VBA 〜 総目次 〜
- 1.基礎編
-- (3).変数と定数
--- (3)-a.データ型と変数の宣言
--- (3)-b.変数の宣言を強制する
--- (3)-c.変数のスコープ
--- (3)-d.定数の宣言
--- (3)-e.組み込み定数
--- (3)-f.配列の宣言
--- (3)-g.オブジェクト変数と Set



Page
Top