変数にオブジェクトを代入する(Set文)

変数を宣言するときに Integer や String などと同じようにデータ型として Worksheet や Range などのオブジェクトを指定することができます。オブジェクトを指定して宣言した変数にはオブジェクトを代入することができますが、通常の値と異なりオブジェクトを変数に代入する場合は Set 文を使用する必要がある点に注意が必要です。ここでは Excel VBA で変数にオブジェクトを代入する方法について解説します。

(Last modified: )

オブジェクトをデータ型として変数を宣言する

変数を宣言するときに IntegerString などのデータ型を指定する場合は次のように記述しました。

Dim 変数名 As データ型

データ型として Integer を指定した場合は変数に整数の値を代入することができます。同じように変数にオブジェクトを代入する場合はデータ型にオブジェクトを指定して変数を宣言します。例えば Worksheet オブジェクトや Range オブジェクトを代入する変数は次のように宣言することができます。

Option Explicit

Sub テスト()
    Dim ws As Worksheet
    Dim r As Range
End Sub

なおデータ型として Object を指定した場合にはすべてのオブジェクトを代入することができます。( Variant を指定した場合やデータ型の指定を省略した場合はオブジェクトを含むあらゆる値を代入できます)。

Option Explicit

Sub テスト()
    Dim ws As Object
    Dim r As Object
End Sub

変数にオブジェクトを代入する

変数を宣言したあとは変数に数値や文字列を代入することができました。例えば Integer 型の変数に整数を代入するには次のように記述します。

Option Explicit

Sub テスト()
    Dim num As Integer
    num = 10
End Sub

同じようにオブジェクトをデータ型として宣言した変数に対してオブジェクトを代入することができますが、オブジェクトを変数に代入する場合は次のように Set 文を使用して代入する必要があります。

Set 変数名 = オブジェクト

例えば Range オブジェクトの変数にオブジェクトを代入する場合は次のように記述します。

Option Explicit

Sub テスト()
    Dim r As Range
    Set r = Range("B2")
End Sub

通常のデータ型と同じように Set 文を使用せずに単に変数に = 演算子を使ってオブジェクトを代入するのは間違いです。

Option Explicit

Sub テスト()
    Dim r As Range
    r = Range("B2")
End Sub

このプログラムを実行すると「オブジェクト変数または With ブロック変数が設定されていません。」というエラーとなります。

メソッドの使い方(1)

変数にオブジェクトを代入する場合は注意してください。

Let文について

なお変数に整数や文字列を代入する場合は正式には Let 文を使用して代入するのですが、 Let は省略可能なので通常は記述しません。

Let 変数名 = 値

例えば Integer 型の変数に整数を代入する場合、省略せずに記載する場合は次のように記述します。

Option Explicit

Sub テスト()
    Dim num As Integer
    Let num = 20
End Sub

Let とは異なり Set は省略できないので、変数にオブジェクトを代入する場合は必ず Set 文を使用する必要があります。

-- --

Excel VBA で変数にオブジェクトを代入する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。