論理演算子And Or Not [VB]

VB2012-2017

論理演算子は複雑にしない

論理演算子 AndOr を組み合わせると、複数の条件式を記述することができ、より複雑な条件文を記述することができます。

いくつでも並べて条件判定ができますが、判定条件が複雑になって、誤り(バグ)の原因になるので、多くの論理演算子を並べないようにプログラムを工夫しましょう。

And 演算子 Or 演算子

以下、a,b,c,d などは変数とします。

次の例では、左側の条件式 a < b と右側の条件式 a> 100 がともに成立したときのみ、Then 以下のプログラムが実行されます。

ソースリストの枠内をクリックすると全選択できます。

    Dim a As Integer = 120
    Dim b As Integer = 71

    If a < b And a > 100 Then

AndOr 演算子は、いくつでも並べて記述することができます。

次の例では、a < b と a>100 と c >= d の3条件式が共に成立したときのみ、Then 以下のプログラムが実行されます。

    Dim a As Integer = 120
    Dim b As Integer = 71
    Dim c As Integer = 5
    Dim d As Integer = 28

    If a < b And a > 100 And c >= d Then

次の例では、a < b または a>100 または c >= d のいずれかの条件式が成立すれば、Then 以下のプログラムが実行されます。

    If a < b Or a > 100 Or c >= d Then

次の例では、条件式 a < b と条件式 a> 100 がともに成立したとき、または、a < b や a> 100 の判定にかかわらず、c >= d が成立したとき、Then 以下のプログラムが実行されます。

条件式 a < b と条件式 a> 100 がともに成立したとき、さらに、c >= d が成立したときも、Then 以下のプログラムが実行されます。

AndOr をたくさん並べて書くと、誤りの原因になります。できるだけ簡潔に書くように心がけましょう。

    If a < b And a > 100 Or c >= d Then

And を使ったプログラム

現在の時刻に応じて、メッセージを表示するプログラムを作成します。 たとえば、9時以降(以上)かつ(And)、18時前(未満)ならば、「こんにちは」と表示します。

現在時刻は、System.DateTime.Nowを使って取得できます。時刻の時0~23は、Hour関数の引数に現在時刻System.DateTime.Nowを指定します。

Hour関数 の詳細はこちら

Module Module1

  Sub Main()
      ' 現在時刻の時を取得(0~23)
      Dim ji As Integer = Hour(System.DateTime.Now)
      Dim msg As String

      ' 時刻を判定して処理を振分
      If ji >= 0 And ji < 4 Then
          ' メッセージを作成
          msg = "早く寝ましょう"
      ElseIf ji >= 4 And ji < 9 Then
          msg = "おはようございます"
      ElseIf ji >= 9 And ji < 18 Then
          msg = "こんにちは"
      ElseIf ji >= 18 And ji < 22 Then
          msg = "こんばんは"
      Else    ' 22時以降24時未満
          msg = "おやすみなさい"
      End If

      ' 結果を表示
      Console.WriteLine(msg)
  End Sub

End Module

Not 演算子

Not 論理演算子は、Not以下の条件判定式を否定します。

次の例では、a < b でないとき、Then 以下のプログラムが実行されます。

If a >= b Then と同じです。こちらのほうが分かりやすい。できるだけ分かりやすいプログラムを書くようにします。

    If Not(a < b) Then

次の例では、a < b かつ a >100 でないとき、Then 以下のプログラムが実行されます。だんだん分かりにくくなってきましたね。論理演算子は注意して使いましょう。

    If Not(a < b And a > 100) Then