【VBA】条件分岐If文の使い方とサンプル構文~複数条件 And Or Not~

VBA

よく利用される条件分岐のIf文について解説します。

If文の使い方

If文の書式は下記の通り。

If 条件式 Then
条件に一致していたら処理が実行される
End If
※コードの見方
白・・・コード
紫・・・コメント
青・・・プロシージャの宣言
その他・・・コードを見やすくするために使うかも

指定した条件式に一致した場合には内部の処理が実行されて、一致しない場合は処理はスキップされます。

If文を使ってみる

If文で条件分岐をしてみます。今回は変数yにあらかじめ文字列を格納しておき
条件に一致した場合にイミディエイトウィンドウに出力されるようにしていきます。

Sub test()
  Dim y As String
  y = "値は100です"
    If Cells(3, 3).Value = 100 Then
      Debug.Print y
    End If
End Sub

If Cells(3, 3).Value = 100 Then では指定したExcelの位置に100の値があれば条件を一致としています。

指定したセルの位置に100と記載があれば、変数yに格納されている文字列がイミディエイトウィンドウに出力されます。

反対に記載が無い、または100以外の整数の場合は何も出力されずスキップされるのでそのまま処理を終了します。

条件に一致しないときの処理 (else)

条件に一致しない場合に対して何かしらの処理を入れるにはIf文の中にelseを追加します。

If 条件式 Then
  条件一致で処理が実行される
Else
  条件不一致で処理が実行される
End If

条件に一致しないときの処理を追加してみる

条件に一致しなかったときの処理を追加して処理を実行する。下記ではセルに100以外の値が入力されている場合は”100ではありません”と表示されます。

Sub test()
  Dim y As String
  y = "値は100です"
    If Cells(3, 3).Value = 100 Then
      Debug.Print y
    Else
      Debug.Print "100ではありません"
    End If
End Sub

複数の条件を確認する(ElseIf)

If文は複数の条件を指定することができます。

If 条件式 Then
  条件一致で処理が実行される
EleseIf 条件式 Then
  条件一致で処理が実行される
Else
  どちらも条件不一致で処理が実行される
End If

複数条件で確認してみる

整数型の変数xを定義してセルの値を取得できるようにしました。最初のIfでセルの値が100かどうかを確認し、一致しない場合はElseIfで値が100以下かどうかを確認しています。

値が100以下であればその値を取得してイミディエイトウィンドウに出力します。一致しない場合は”値は100以上です”と出力します

Sub test()
  Dim y As String
  Dim x As Long
  y = "値は100です"
    If Cells(3, 3).Value = 100 Then
      Debug.Print y
    ElseIf Cells(3, 3).Value <= 100 Then
      x = Cells(3, 3).Value
      Debug.Print "値は" & x & "です"
    Else
      Debug.Print "値は100以上です"
    End If
End Sub

論理演算子を利用したIf文(And Or Not)

複数の条件判定を一度に指定したい場合や条件式の否定文を利用したいときには論理演算子を利用することで実装できます。論理演算子を利用できるケースは以下の通りです

  • すべての条件を満たす
  • いずれかの条件を満たす
  • ~ではない
論理演算子説明
A And BAかつB
(AとBの両方の条件を満たす)
If x > 10 And x < 30 Then
xが10以上かつ30以下
A Or BAまたはB
(AかBのいずれか1つでも条件を満たす)
If x < 10 Or x > 30 Then
xが10以下もしくは30以上
Not AAではないIf Not x = “” Then
xが空ではない

複数条件を指定するサンプル構文(And Or)

上記はよくあるテストの合否判定を記入する表となります。今回は例として全教科が60点以上を合格ラインとします。

例として作成した表はたった3人で教科も2科目ととても少ないですがこれが5教科でクラスが40人となると結構大変ですね。

下記のコードは指定した点数に到達している人のD列(合否)に”合格”もしくは”不合格”を記入するサンプル構文です

Sub sample()
Dim x, i As Long
x = 2
i = 2
  Do While Cells(i, 3).Value <> ""
        If Cells(x, 2) >= 60 And Cells(x, 3) >= 60 Then
            Cells(x, 4) = "合格"
        Else
            Cells(x, 4) = "不合格"
        End If
      x = x + 1
    i = i + 1
  Loop
End Sub

サンプル構文を実行した結果が以下となります。

想定通りに全員分の合否を一括で判定することができました。

サンプルではすべての行を一括で処理するためにループ文も使用しています。そちらの内容がわからない方は下記の記事に詳細を記載しているのでご覧ください。

ツール作成でループ処理は必須の知識ですのでぜひ習得しましょう。

条件式を否定するIf文(Not)

前述のAndを利用したサンプル構文でも利用した上記の表を例に紹介していきます。

また、合否の中に”合格”もしくは”不合格”を記入していくサンプルとなります。

Sub sample()
Dim x, i As Long
x = 2
i = 2
  Do While Cells(i, 3).Value <> ""
        If Not (Cells(x, 2) <= 60) And Not (Cells(x, 3) <= 60) Then
            Cells(x, 4) = "合格"
        Else
            Cells(x, 4) = "不合格"
        End If
      x = x + 1
    i = i + 1
  Loop
End Sub

このような使用方法はあまり理想的ではありませんが、先ほどとは異なり条件式は指定したセルが60以下であることを判定しています。

ですが、条件式を個別にNot演算子で囲っているので下記のように判定が変わります。

  • Cells(x, 2) <= 60 ⇒ セルが60以下であればTrue
  • Not(Cells(x, 2) <= 60 ) ⇒ セルが60以上であればTrue

このように結果が反転させたいときに利用することができます。条件に一致しない場合に処理を行いたいときに利用できますが通常のIf文でもelseなどを利用すれば使う必要がないケースもあります。

状況に応じて使い分けるようにしましょう。

ちなみにですが、出力結果は前述したサンプル構文と同じ結果となります。

補足1 セルの位置を指定

セルの位置指定の方法を紹介

プロパティ 書式 セル単体の指定 行の指定 列の指定 複数行の指定 複数列の指定 全セルを指定
Range  Range("列+行")  Range("A1")
セルA1を指定
 Range("1:1")
行1を指定
Range("A:A")
列Aを指定
Range("1:5")
行1~5を指定
Range("A:E")
列A~Eを指定
取得できない
cells Cells(行, 列) Cells(1,2)
セルB1を指定
取得できない 取得できない 取得できない 取得できない cells.select

タイトルとURLをコピーしました