本ページには広告が含まれています。

ExcelVBA IsObject関数 オブジェクトかを判定する

ExcelVBA IsObject関数 オブジェクトかを判定する

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行目で、バリアント型の変数に NothingSet しています。これによって (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 ステートメントを使う必要があります。

オブジェクトの種類

オブジェクトには以下のようなものがあります。

  1. コレクションオブジェクト
    • 例: Collection, Dictionary
  2. Excelオブジェクト
    • 例: Workbook, Worksheet, Range, Chart など
  3. ユーザー定義オブジェクト
    • 例: クラスモジュールを使用して作成されたオブジェクト
  4. 標準オブジェクト
    • 例: FileSystemObject, Scripting.Dictionary

おわりに

Excel VBA IsObject 関数は、引数の変数名がオブジェクトなら True を返し、それ以外は False を返します。単純にオブジェクトかどうかだけ判定する関数なので、オブジェクト参照が割り当てられているのかどうかや、オブジェクトの種類などは確認できません。

エラー防止の観点から、IsObject 関数を使うことで、変数がオブジェクトを正しく参照しているか確認でき、オブジェクト参照エラーを防ぐことができます。これによって、動的にオブジェクトを操作するプログラムを安全に実行できるようになります。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらからご参照ください。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!