VBAを学習して間もないとき、And演算子やOr演算子を使用する場面はすぐ想像できるのですが、Not演算子の使用場面は想像できませんでした。
例えば、「AがBでないなら」とコーディングしたいとき、「If Not A = B Then ・・・」などと書くことも可能ですが、普通「If A <> B Then ・・・」とするので使わないな、とか考えていました。
実際はよく使うのですが、具体的な使用例を知った方が理解が進むと思うので、ご紹介します。
If文の判別式の中で
本題に入る前にちょっとだけ寄り道を。
「[変数]が数値のときに[処理]する」という内容をコーディングしてみます。
初心者のころは
If IsNumeric([変数]) = True Then [処理]
といったようなコーディングをしていました。
これ自体は何ら間違っていないのですが、無駄な処理が走る好ましくないコードです。
一般的には
If IsNumeric([変数]) Then [処理]
のようにコーディングし、「=True」は記述しません。
なぜ初心者のコーディングとして紹介した方が無駄な処理が走るのか?
内部処理のイメージを説明します。
- 「IsNumeric([変数])」から、変数が数値なら 'True' を返す
- 判別式「IsNumeric([変数]) = True」で式が成立しているか判別し、成立していたら 'True' を返す
- 判別式が 'True' を返したら、[処理]を実行する
となります。
逆に一般的なコーディングは、IsNumeric関数の戻り値が即判別式の戻り値となるため、上記の2番目の処理が省略されます。
たとえ処理が効率的でも可読性に問題があると思う方もいるかもしれませんが、「一般的」と申し上げた通り、分かりづらいと感じるのは初心者だからです。
ようやく本題です。
今度は逆に「[変数]が数値でないときに[処理]する」としたいとき、すなわち関数が 'False' を返すときは、どのようにすればよいでしょうか。
If IsNumeric([変数]) Then
Else
[処理]
End If
などと記述してもいいですが、不格好ですよね。
そこで使うのが、Not演算子です。
If Not IsNumeric([変数]) Then [処理]
このようにコーディングすることで、IsNumeric関数が 'False' を返したときに実行するようになります。
つまり、If文の判別式に「Boolean値を返す関数が 'False' を返すとき」と表現したいときに使用するのが、最も多いNot演算子の使用場面です。
オブジェクトのプロパティ値を反転する
コマンドボタンをクリックすると、「 Sheet1 の A列 の 表示/非表示 を切り替える」という内容をコーディングします。
同じく初心者は
With WorkSheets("Sheet1").Clolumns("A")
If .Hidden = True Then .Hidden = False Else .Hidden = True
End With
といったコーディングになることが多いでしょう。
結構スッキリしたコードですが、もっとシンプルにできます。
さきほどのポイントもあるのですが、それ以上にシンプルになります。
With WorkSheets("Sheet1").Clolumns("A")
.Hidden = Not .Hidden
End With
電子機器の電源ボタンで On/Off を切り替える場合のように Boolean値 を反転させるときに使います。
ご質問は下の 「コメントを書く」 からお願いします。
ExcelやVBA全般に関わる質問で、比較的簡単にお答えできるものはできる限り回答したいと思います。
回答を公開でなくメールでやり取りしたいという場合は、その旨記載していただければ非公開で回答することも可能です。
有償での作業依頼は非公開にしますので、条件等をお知らせください。