「vba nothing でない時」
「excel vba if nothingでない」
「vba 変数がnothingでない場合」
という検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
VBA(Visual Basic for Applications)では、オブジェクト変数にオブジェクトがセットされているかどうか・Nothingかどうかの判定を、Is演算子で行います。
「もしもNothingならば」の反対、
「もしもNothingでないならば」という判定を行うには、どのような記述をすればいいのかを探していた方による検索です。
Nothingではない判定を行うサンプルマクロ
参考になりそうなSubプロシージャをご紹介しておきます。
Dim obj As Object
Set obj = ThisWorkbook
If Not (obj Is Nothing) Then
MsgBox "Nothingではありません。"
Else
MsgBox "Nothingです。"
End If
上記のマクロで使っている、
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演算子