PC・スマホ

VBAのIf文で色々な論理演算子(Not、And、Or)を使ってみよう

Excel VBAでプログラミングをしていると条件によって処理を分けたい時が出てきます。

そんな時にはIf文を使うことが多いと思いのではないでしょうか。
If文では論理演算子(Not、AND、OR)を使用することで様々な条件を指定することができます。

本日はIf文で使用する論理演算子の使い方について紹介します。

 

今回使用するExcelシート

この記事では以下のExcelシートを使用します。

紹介しているVBAは全てボタンを押した時の処理になっています。

Excel シート

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文で論理演算子を使うとできることが広がるのでたくさん使いたくなりますが、一つの条件に使いすぎると分かりにくくなってしまいます。

できるだけ分かりやすい条件式になるように心がけてみてください。

国本温子 (著), 緑川吉行 (著), できるシリーズ編集部 (著)
富士通エフ・オー・エム株式会社 (FOM出版) (著)