Excel VBAでプログラミングをしていると条件によって処理を分けたい時が出てきます。
そんな時にはIf文を使うことが多いと思いのではないでしょうか。
If文では論理演算子(Not、AND、OR)を使用することで様々な条件を指定することができます。
本日はIf文で使用する論理演算子の使い方について紹介します。
目次
今回使用するExcelシート
この記事では以下のExcelシートを使用します。
紹介しているVBAは全てボタンを押した時の処理になっています。

If文でNot演算子を使用すると条件の否定になる
If文の条件判定式の前にNotをつけると、条件式の否定になります。
Not演算子を使用したプログラム
Sub ボタン1_Click() Dim i As Integer For i = 1 To 5 If Not ActiveSheet.Cells(i, 1) Like "*山*" Then ActiveSheet.Cells(i, 2).Value = "×" Else ActiveSheet.Cells(i, 2).Value = "○" End If Next End Sub
プログラムではA列に「山」が含まれているかの判定をB列に表示しています。
If Not ActiveSheet.Cells(i, 1) Like "*山*" Then
Notを考えないとA列に「山」が含まれている場合という条件式になります。
そのためNotを条件式の前につけると、A列に「山」が含まれない場合という条件式に安ります。
Not演算子を使わないで条件式の否定をする方法
Not演算子を使わなくても条件式の否定をすることはできます。
処理結果としては同じなので、分かりやすい方法を使用してください。
If文でElseを使う
Sub ボタン1_Click() Dim i As Integer For i = 1 To 5 If ActiveSheet.Cells(i, 1) Like "*山*" Then ActiveSheet.Cells(i, 2).Value = "○" Else ActiveSheet.Cells(i, 2).Value = "×" End If Next End Sub
If文のElseは条件式に当てはまらない時の処理なので、条件式にNotを使用した場合と同じ処理結果になります。
比較演算子「<>」を使用する
Sub ボタン1_Click() Dim i As Integer For i = 1 To 5 If ActiveSheet.Cells(i, 1) <> "東京都" Then ActiveSheet.Cells(i, 2).Value = "○" Else ActiveSheet.Cells(i, 2).Value = "×" End If Next End Sub
比較演算子「<>」は条件式の比較演算子は「<>」の左右がイコールでない場合に処理を行います。
サンプルではA列が「東京都」でない場合は〇、そうでない場合は「×」をB列に出力するしています。
AND演算子は全部の条件が合致する
If文では複数の条件をセットすることができます。
AND演算子を条件で挟むと両方の条件がTrueの場合にIf文内の処理を実行します。
Sub ボタン1_Click() Dim i As Integer For i = 1 To 5 If ActiveSheet.Cells(i, 1) Like "山*" _ And ActiveSheet.Cells(i, 1) Like "*県" Then ActiveSheet.Cells(i, 2).Value = "○" Else ActiveSheet.Cells(i, 2).Value = "×" End If Next End Sub
A列の文字列が「山」から始まり、「県」で終わる場合は「〇」、それ以外は「×」をB列に表示します。
比較対象が一緒だからと言って「If ActiveSheet.Cells(i, 1) Like "山*" And "*県" Then」
という書き方ができそうですが、これだとエラーになってしまいます。
OR演算子はどれか一つの条件に合致すればよい
AND演算子は全ての条件がTrueである必要がありますが、OR演算子は複数の条件のどれか一つがTrueだとIf文内の処理を実行します。
Sub ボタン1_Click() Dim i As Integer For i = 1 To 5 If ActiveSheet.Cells(i, 1) Like "山*" _ Or ActiveSheet.Cells(i, 1) Like "*県" Then ActiveSheet.Cells(i, 2).Value = "○" Else ActiveSheet.Cells(i, 2).Value = "×" End If Next End Sub
A列の文字列が「山」から始まるか「県」で終わる場合は「〇」、それ以外は「×」をB列に表示します。
論理演算詩を多用して複雑にしすぎないようにする
一つの条件式で複数の論理演算子を使用することで複雑な処理ができるようになります。
ただ複雑になればなるほどバグの原因となるので、一つの条件式にたくさんの論理演算子を並べることは避けましょう。
一つの条件式に処理をまとめるのではなく、複数のIf文にしたりElseIfを使用して条件式がシンプルになるように心がけてみてください。
最後に
いかがだったでしょうか。
If文で論理演算子を使うとできることが広がるのでたくさん使いたくなりますが、一つの条件に使いすぎると分かりにくくなってしまいます。
できるだけ分かりやすい条件式になるように心がけてみてください。