IsObject関数
VBAで扱う変数がオブジェクト変数かどうかを調べたい場合、IsObject関数で判定できます。
判定はデータ型のみで行われるため、変数の値は判定には影響しません。
オブジェクト変数とはクラス型の変数のことを指します。具体的には、変数の後ろにドット(.)を入力してプロパティやメソッドが表示されるものはオブジェクト変数です。例えばセルを表すRange型の変数もオブジェクト変数の一種で、ドット(.)を入力するとValueなどのプロパティが表示されることからオブジェクト変数であることが分かります。
Integer型やString型はドット(.)を押しても候補表示はされません。これらはオブジェクト変数ではないと判別できます。なおこれらクラス型ではないデータ型のことを総称してプリミティブ型と言います。
コードを書いている最中はドット(.)を入力することでオブジェクト変数かどうか判定できますが、処理中に判定したい場合にIsObject関数を利用します。
構文
Function IsObject(Expression) As Boolean
Expression | 引数を指定します。 |
戻り値 | 引数で渡された変数がオブジェクト変数の場合はTrue、そうでない場合はFalseを返します。 |
配列のデータ型を判定したい場合は、要素ごとに判定する必要があります。
オブジェクト型の配列の各要素(obj[0]など)を判定した場合はTrueを返しますが、配列自体を判定した場合は保持するデータ型に関わらずFalseを返します。
用途
IsObject関数の主な用途としては、Variant型の変数が実際にはどういうデータ型なのかを知りたいときに利用します。
例えば、自作した関数の引数がVariant型で、関数の内部で代入処理が必要な場合に、引数がオブジェクト型かどうかで代入の書き方が変わります。オブジェクト型であればSetステートメントを使って「Set obj = 引数」のように書き、オブジェクト型でなければ=を使って「s = 引数」のように書かなければなりません。そのような判定にIsObject関数を利用します。
サンプルコード
以下のコードはVariant型の引数を持つ関数で、その引数のデータ型をIsObject関数を使ってオブジェクト型かどうかを判定します。
2つ関数がありますが、1つ目がIsObject関数を使っている関数で、2つ目のIsObjectSampleTest関数はIsObjectSample関数を呼び出しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub IsObjectSample(a As Variant) '// オブジェクト型の場合は処理せず抜ける If IsObject(a) = True Then Exit Sub End If Range("A1").Value = a End Sub Sub IsObjectSampleTest() Dim str As String Dim obj As Object str = "abc" Set obj = Range("B2") '// 実行後にA1セルに"abc"を出力 Call IsObjectSample(str) '// 何もしない Call IsObjectSample(obj) End Sub |