【VBA】If Notの意味を解説
ネット記事でプログラムを見ているとIf Not〜というIf文に出会うことがあります。
このIf Notですが、If Notという構文があるわけではありません。
このIf文がどのような構造を取っているか詳しく紹介します。
If Notは「If Not 条件式 Then」を意味している
If文にNotが含まれている場合、「If Not 条件式 Then」と書かれているはずです。
If Notと読みたくなりますが、そうではなく「Not 条件式」と考えるのが正しいです。
Sub TestNot()
'Not演算子のテストコード
Dim bool As Boolean
bool = False
'Not演算子でboolが反転される(False⇒True)
If Not bool Then
MsgBox "Not boolはTrueです。"
End If
End Sub
Not演算子はTrueとFalseを反転させる演算子です。
そのため「Not 条件式」とすると条件式がFalseのときは反転されてTrueになります。
If Notと書かれているIf文はこのように条件式を反転させるためにNot演算子を追加してあります。
Not演算子はどのような時に使うと良いか
ここまでNot演算子を使った例を紹介しましたが、Not演算子を使うのが必ずしも良いわけではありません。
コードが読みづらくなるのならばNot演算子の使用は避けた方が良いです。
Sub UseNot()
'Not演算子の使用は避けた方が良い例
Dim num As Long
num = 9
If Not num = 10 Then
MsgBox "numは10ではありません"
End If
End Sub
Sub NotUseNot()
'Not演算子を使わないコード
Dim num As Long
num = 9
'Not演算子でなく、<>を使用
If num <> 10 Then
MsgBox "numは10ではありません"
End If
End Sub
このサンプルコードのように<>で済むのならばNot演算子は使わない方が可読性が良くなります。
Not演算子を使った方が良い例
Sub UseNotOK()
'Not演算子を使った方が良い例
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
dic.Add "a", 1
'Existsメソッドを使い、Not演算子で反転
If Not dic.Exists("b") Then
MsgBox "bはキーにありません"
End If
End Sub
Not演算子を使うと良いのはブーリアン型を返すメソッドで、Falseのときに実行させたい場合です。
サンプルコードではExistsメソッドを使い、その返り値をNot演算子で反転させています。
このような場合はNot演算子のがスッキリとするのでおすすめです。
(Not演算子を避けると、条件式=Falseといった書き方になる)