Excel VBAの「IsObject 関数」について解説します。
IsObject 関数とは
Excel VBA の IsObject 関数は、指定した識別子(変数名)がオブジェクトなのかどうかを判定します。判定結果はブール(Boolean)型で、オブジェクトであれば True そうでなければ False を返します。
Variant 型の変数にオブジェクトが設定されているかどうかの判定に使用します。
IsObject 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
IsObject 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
IsNumeric(identifier)
引数
引数 | 説明 |
---|---|
identifier | 【必須】識別子(変数の名前)を指定します |
戻り値
戻り値 | 説明 |
---|---|
ブール値 (Boolean) | オブジェクトなら True またはオブジェクトを参照 している場合も True、それ以外は False を返します |
※ バリアント型変数に Nothing が設定されている場合にも True を返します。
※ Nothing はオブジェクト変数の初期値です。
解説(使用例)
以下、IsOblect 関数の使用例です。
IsObject関数サンプル1 (オブジェクトの判定例)
'■IsObject関数サンプル1 (オブジェクトかどうかを判定する例)
Sub IsObject_Sample01()
Dim str As String ' 文字列型
Dim var As Variant ' バリアント型
Dim obj As Object ' オブジェクト型
Dim arr() As Object ' オブジェクト型の配列
Debug.Print IsObject(str) ' Falseを返します
Debug.Print IsObject(var) ' Falseを返します
Debug.Print IsObject(obj) ' Trueを返します
Set var = obj ' バリアントにオブジェクトをセット
Debug.Print IsObject(var) ' Trueを返します
Set var = Nothing ' バリアントにNothingをセット
Debug.Print IsObject(var) ' Trueを返します
'▼オブジェクトが配列の場合
Debug.Print IsObject(arr) ' Falseを返します
var = Array(arr, str, obj) ' バリアントに直接配列を代入
Debug.Print IsObject(var) ' Falseを返します
End Sub
それぞれの結果は、コード内のコメントを参照願います。補足部分については次のとおりです。
・13~14行目で、バリアント型の変数に Nothing を Set しています。これによって (Nothing はオブジェクト型の初期値なので) バリアントの内部型式がオブジェクト型になったため True が返りました。
・16~18行目では、オブジェクト型の配列とバリアント型の配列を判定し、どちらも False が返っています。オブジェクト型の配列でも False であることから、配列そのもの場合はすべてオブジェクトとは判定されないことがわかります。ただし、オブジェクト型配列の各要素単体を IsObject で判定すると True を返します。
IsObject関数サンプル2 (オブジェクト参照の確認例)
次のサンプルは、まず IsObject 関数で変数がオブジェクトであるかどうかを確認します。さらにオブジェクト参照が有効であるかどうかを確認します。
'■IsObject関数サンプル2 (オブジェクト参照の確認例)
Sub IsObject_Sample02()
Dim obj As Object
'▼エラーハンドリングを設定しておきます
On Error GoTo ErrorHandler
'▼オブジェクトを設定(ここではNothingで設定)
Set obj = Nothing
'▼変数がオブジェクトかどうかを確認
If IsObject(obj) Then
' オブジェクトならさらに参照が有効かを確認
If Not obj Is Nothing Then
' 有効な場合の処理をここに設定する
MsgBox "objは有効なオブジェクトです"
Else
' Nothing の場合の処理
MsgBox "objはNothingです"
End If
Else
' オブジェく出なかった場合の処理
MsgBox "objはオブジェクトではありません"
End If
Exit Sub
'▼エラーが発生した場合の処理を設定します
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description
End Sub
コードを実行してみた際に表示される MsgBox の画像については省略します。以下、補足説明です。
・5行目、On Error GoTo ErrorHandler を使用して、エラートラップを設定しています。
・8行目、この例では Set obj = Nothing でオブジェクトを設定していますが、本来はここに実際のオブジェクト参照を割り当てます。
・10行目、IsObject 関数を使用して、変数 obj がオブジェクトかどうかを確認します。
・12行目、IsObject(obj) が True だった場合、さらに Nothing でないかを確認します。
・25行目からがエラーハンドリングです。途中でエラーが発生した場合、この場所にジャンプしてここではエラーメッセージを表示するようにしています。メッセージ以外にもエラーに対処するコードをここに設定します。
IsObject 関数の注意点
- IsObject 関数は、変数がオブジェクトかどうかを確認するだけで、オブジェクトの種類までを確認することはできません。
- オブジェクトの種類を確認したい場合は TypeName 関数 または VerType 関数 を使用します。
- オブジェクト変数にオブジェクト参照を割り当てるには Set ステートメントを使う必要があります。
オブジェクトの種類
オブジェクトには以下のようなものがあります。
- コレクションオブジェクト
- 例: Collection, Dictionary
- Excelオブジェクト
- 例: Workbook, Worksheet, Range, Chart など
- ユーザー定義オブジェクト
- 例: クラスモジュールを使用して作成されたオブジェクト
- 標準オブジェクト
- 例: FileSystemObject, Scripting.Dictionary
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA IsObject 関数は、引数の変数名がオブジェクトなら True を返し、それ以外は False を返します。単純にオブジェクトかどうかだけ判定する関数なので、オブジェクト参照が割り当てられているのかどうかや、オブジェクトの種類などは確認できません。
エラー防止の観点から、IsObject 関数を使うことで、変数がオブジェクトを正しく参照しているか確認でき、オブジェクト参照エラーを防ぐことができます。これによって、動的にオブジェクトを操作するプログラムを安全に実行できるようになります。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;