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の、オブジェクト変数・オブジェクト式に慣れていない方からいただく、定番の質問・疑問の一つです。

[スポンサードリンク]

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

「vba nothing 比較」
「マクロ if nothing の場合」
「excel vba nothing 条件式」
「excel vba nothing if文」
という検索をなさった方は、おそらく、
  Dim obj As Object
  If obj = Nothing Then
   何らかの処理
  End If
のような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
と書き直して考えてみてください。

最終更新日時:2019-01-17 14:24

[スポンサードリンク]

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

「条件分岐」の記事一覧

検索


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

.