Home » エクセルマクロ・Excel VBAの使い方 » Nothingの反対の判定は?-Not演算子

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

「vba nothing でない時」
「excel vba if nothingでない」
「vba 変数がnothingでない場合」
という検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

VBA(Visual Basic for Applications)では、オブジェクト変数にオブジェクトがセットされているかどうか・Nothingかどうかの判定を、Is演算子で行います。

「もしもNothingならば」の反対、
「もしもNothingでないならば」という判定を行うには、どのような記述をすればいいのかを探していた方による検索です。

[スポンサードリンク]

Nothingではない判定を行うサンプルマクロ

参考になりそうなSubプロシージャをご紹介しておきます。

Sub Nothingではないという条件を判定するIf文()

 Dim obj As Object

 Set obj = ThisWorkbook

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

End Sub

上記のマクロで使っている、
 If Not (obj Is Nothing) Then
が「Nothingではない」の判定です。

obj Is Nothingという比較演算を、Not演算子で論理否定してやれば「Nothingではない」という判定ができます。

サンプルマクロの解説

上記のマクロをそのままの状態で実行すると、
 Set obj = ThisWorkbook
の行で、オブジェクト変数・objに、このSubプロシージャの書かれているブックを表すWorkbookオブジェクトがセットされますから、
 If Not (obj Is Nothing) Then
という「オブジェクト変数・objがNothingではない」という判定がTrueになり、
  MsgBox "Nothingではありません。"
が実行されます。

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

この場合は、
 Set obj = ThisWorkbook
が実行されないために、オブジェクト変数・objは初期状態のNothingのままですから、
 If Not (obj Is Nothing) Then
という「オブジェクト変数・objがNothingではない」という判定が、Falseになるので、
 Else
  MsgBox "Nothingです。"
が実行されます。

上記のマクロはサンプルですからElseも書いていますが、実務では、
 If Not (obj Is Nothing) Then
  何らかの処理
 End If
のような、Elseのないパターンもよく出てきます。

書籍やネットでは、
 If Not obj Is Nothing Then
といった書き方も見かけますが、ここでご紹介しているとおり、
 If Not (obj Is Nothing) Then
のように「obj Is Nothing」という比較式を、カッコで括った記述のほうが理解しやすいのではないかと思います。

落ち着いて理解しましょう

上記のマクロがなんだかよくわからなくなった、という場合はNot演算子を使わない、
 If obj Is Nothing Then
  MsgBox "Nothingです。"
 Else
  MsgBox "Nothingではありません。"
 End If
の意味を、もう一度考えなおしてください。

「Nothingの場合」という条件と、「Nothingではない場合」という条件を、Not演算子でひっくり返したのが、
 If Not (obj Is Nothing) Then
  MsgBox "Nothingではありません。"
 Else
  MsgBox "Nothingです。"
 End If
です。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Nothingの反対の判定は?-Not演算子

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


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

.