サイトについて      連絡先   検索

VBA オブジェクト型 [Object]

はじめに

Excel VBA の オブジェクト型 (Object) を操作する方法を紹介します。

Worksheet などのクラスで作成されたものが Object 型です。

比較をするには Is 演算子を使用します。インスタンス化や参照型の特徴なども紹介します。

代入

Object 型の代入には Set を頭に付けます。


Dim o1 As Object ' Object 型にはすべてのオブジェクトを代入できます。
Set o1 = Worksheets(1)

Dim o2 As Worksheet ' Worksheet は オブジェクト
Set o2 = Worksheets(1)

Set を忘れると「エラー 91 オブジェクト変数または With ブロック変数が設定されていません。」が発生します。


Dim sheet As Worksheet
sheet = Worksheets(1) ' エラー発生
1

インスタンス化

Object 型はクラスで作成されています。

自分で作成したクラスを使用するには New を使用してインスタンス化する必要があります。


Dim c As Class1
Set c = New Class1 ' インスタンス化

インスタンス化しないで使用すると「エラー 91 オブジェクト変数または With ブロック変数が設定されていません。」が発生します。


Dim c As Class1
c.関数 ' エラー発生

Dim sheet As Worksheet
sheet.Name = "シート1" ' エラー発生

詳しくは「クラス」をご覧ください。

Object 型の比較

オブジェクト型の参照を比較する Is 演算子があります。= で比較できません。

演算子 演算名 使用例 結果
Is参照が等しいSheets(1) Is NothingFalse

何も入っていないオブジェクト型の変数を比較するには Nothing を使用します。


Dim b As Boolean
b = (Sheets(1) Is Sheets(1))
Debug.Print (b) ' True

b = (Sheets(1) Is Sheets(2))
Debug.Print (b) ' False

Dim sheet As Worksheet
b = (sheet Is Nothing)
Debug.Print (b) ' True

b = (Sheets(1) = Sheets(1)) ' これはエラー

値型と参照型の違い

オブジェクトつまりクラスで作成されたものはすべて参照型です。それ以外の Integer や String などの型は値型です。参照型を別の変数に代入すると値型と違う動作になります。

詳しくは「値型と参照型の違い」をご覧ください。

関連ページ