Developer

【ExcelVBA】オブジェクト変数
2021.07.19
Lv1

【ExcelVBA】オブジェクト変数

オブジェクト変数とは

ここまで変数には数値や文字列といったものを格納していました。
変数にはこうした値だけではなく、オブジェクトと呼ばれるものを格納することができます。
セルやワークシートなどがオブジェクトにあたります。オブジェクト変数はこうしたオブジェクトを格納する変数ということになります。オブジェクトそのものが入っているかのように扱えますが、実際はオブジェクトそのものが入っているというわけではなく、オブジェクトの場所を指し示す情報(メモリ上のアドレス)が格納されています。
オブジェクトを変数に入れることで、そのオブジェクトが持つプロパティの値を取り出したり、設定したりすることができるようになります。
またオブジェクトが持つメソッドも使用することができます。

オブジェクト変数の宣言と値の代入

オブジェクト変数を使用するにはこれまでの変数でIntegerやStringなどの型を指定していたところでオブジェクトを指定します。
オブジェクトの方にはセルを表す「Range型」やワークシートを表す「Worksheet型」などをあります。
またセルやワークシートといった特定のオブジェクトを表すのではなく、どんなオブジェクトでも対応している「Object型」という型もあります。
変数に入れたいオブジェクトの型にあった型を指定する必要があります。

Dim 変数名 As オブジェクトの型
Dim 変数名 As Object

宣言したオブジェクト型の変数にオブジェクトを格納する場合は変数のようにただ代入するのではなく、setを使用します。

Set 変数名 = 代入するオブジェクト

オブジェクト変数のサンプル

では実際にオブジェクト変数を使用したサンプルコードを見てみましょう。
Excelに以下のようなシートが3つある状態で、3つ目のシートの操作を行います。

Sub VBA基礎第29回_1()
    Dim r As Range
    Dim sheet As Worksheet
    
    Set sheet = Worksheets("sheet3")            'オブジェクト変数にシートを指し示す値を代入
    Set r = sheet.Range("A2")					'オブジェクトにセルA2を指し示す値を代入
    
    sheet.Name = "VBA29回目"
    sheet.Activate                              'ワークシート名が第29回となっているシートをアクティブに
                                                'するメソッドActivateを呼び出し
    
    r.Value = "オブジェクト変数"                'RangeオブジェクトのValueプロパティの値を表示
    
       
End Sub

結果は以下のようになります。
もし代入する際にsetを使用しないと以下のようなエラーとなります。

sheet3とA2を指し示す値をオブジェクト変数に格納しています。
オブジェクト変数では、プロパティやメソッドを使うことができるため、sheet3のNameプロパティを変更しています。
またActivateメソッドを使用してアクティブなシートにしています。
Rangeオブジェクトの方はValueプロパティを使って値を変更しています。
このようにオブジェクト変数を使用すると格納されているオブジェクトのプロパティやメソッドを使用することができます。

まとめ

変数には数値や文字列の値だけではなく、オブジェクトと呼ばれるものを格納することができます。
オブジェクトが持つプロパティやメソッドを使用してオブジェクトを操作することができるようになります。

確認問題

以下の「○○○」に当てはまる文言を解答してください。

・シートやセルなどのオブジェクトと呼ばれるものは○○○変数に格納することができます。
・格納されているオブジェクトが持つ○○○や○○○を使用してオブジェクトを操作することができるようになります。

答え


・シートやセルなどのオブジェクトと呼ばれるものはオブジェクト変数に格納することができます。
・格納されているオブジェクトが持つプロパティやメソッドを使用してオブジェクトを操作することができるようになります。

次回は、「ユーザ定義型」です。

 
 

連載目次リンク

ExcelVBA 入門 連載目次