Home » エクセルマクロ・Excel VBAの使い方 » 条件分岐 » If文でNothingの判定を行うには-Is演算子

If文でNothingの判定を行うには-Is演算子

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「vba nothing 比較」
「マクロ if nothing の場合」
「excel vba nothing 条件式」
「excel vba nothing if文」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがあります。

VBA(Visual Basic for Applications)の、オブジェクト変数・オブジェクト式に慣れていない方からいただく、定番の質問・疑問の一つです。

[スポンサードリンク]

If オブジェクト変数・オブジェクト式 = Nothing Thenではダメ

「vba nothing 比較」
「マクロ if nothing の場合」
「excel vba nothing 条件式」
「excel vba nothing if文」
という検索をなさった方は、おそらく以下のようなIf文で、
 Dim obj As Object
 If obj = Nothing Then
  何らかの処理
 End If
Nothingかどうかの判定を行おうとしたのではないかと想像しています。

このような条件分岐文を書いて、メニュー[デバッグ]-[VBAプロジェクトのコンパイル]を実行すると、「コンパイルエラー:オブジェクトの使い方が不正です。」というエラーが発生してしまいます。

Nothing判定を行うサンプルマクロ

Nothingの判定を行うには、比較演算子の「=」ではなく「Is」を使ってください。

具体的には以下のような使い方をします。


Sub Nothingを判定するIf文()

 Dim obj As Object

 Set obj = ThisWorkbook

 If obj Is Nothing Then
  MsgBox "Nothingです。"
 Else
  MsgBox "Nothingではありません。"
 End If

End Sub

上記のマクロを実行すると、オブジェクト変数・objにはこのSubプロシージャが書かれているWorkbookオブジェクトがセットされているので、「Nothingではありません。」というメッセージが表示されます。

次に、
 Set obj = ThisWorkbook
をコメントアウトしてから実行してください。

この場合はオブジェクト変数・objには何もセットされない状態で
 If obj Is Nothing Then
の判定が行われるので「Nothingです。」というメッセージが表示されます。

オブジェクト変数・オブジェクト式のNothing判定には、Is演算子を使ってください。

Is演算子を使ったIf文がピンと来ない場合

また、上記のNothing判定を行っている
 If obj Is Nothing Then
の部分が、どうもピンと来ないという方も時折いらっしゃいます。

その場合は、
 If obj Is Nothing Then
を、
 If (obj Is Nothing) = True Then
と書き直して考えてみてください。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 条件分岐 » If文でNothingの判定を行うには-Is演算子

TrackBack:3

TrackBack URL
オブジェクト変数がオブジェクトを参照しているかどうかを調べるには from インストラクターのネタ帳
オブジェクト変数がオブジェクトを参照しているかどうかを確認するには、オブジェクト変数がNothingかどうかを調べてください。
Nothingの反対の判定は?-Not演算子 from インストラクターのネタ帳
対象:Excel2007, Excel2010, Excel2013, Win...
Unionで複数のセルを選択するExcelマクロ from インストラクターのネタ帳
対象:Excel2007, Excel2010, Excel2013, Win...
[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 条件分岐 » If文でNothingの判定を行うには-Is演算子

Copyright © インストラクターのネタ帳 All Rights Reserved.

.