If[条件式]than~Elseを使った条件分岐処理の書き方
エクセルVBAではIf文をつかって条件分岐ができます。
単純な2択の条件分岐処理から、条件式をAndやOr、Notなどの論理演算子を複雑に組み合わせたもまで実装可能です。これによりユーザーや状況によって処理を分岐させたプログラムを作ることができます。
ここでは、エクセルのIf関数同様にVBAで条件分岐にて処理を分けたい時に使える基本の構文や、複数分岐や論理演算子や入れ子(ネスト)にした書き方を紹介しています。
If文を使ったVBAコードも掲載しておきますのでコピーして動作を確認頂いたり、カスタマイズしてご自身の環境に合わせてお使いいただけます。
If[条件式]than~Elseの基本構文
エクセルVBAの条件分岐処理のIfを使った基本構文は以下となります。
Elseがない場合の基本構文
If 条件式 Then
条件に一致した場合に実行したい処理
End If
Elseがある場合の基本構文
If 条件式 Then
条件に一致した場合に実行したい処理
else
条件に一致しない場合に実行したい処理
End If
If[条件式]than~Elseの基本構文サンプルコード
構文に基づいてサンプルコードを紹介します。
If[条件式]than~Elseの基本構文:Elseがない場合のサンプルコード
Sub if文の書き方について()
Dim i As Integer
i = 1
Debug.Print i
If i = 1 Then
MsgBox ("条件に一致した処理を実行中です。")
End If
End Sub
変数iを宣言して、iに数値の1を代入してIf文で条件判定をしています。
数値や文字列などを直接指定した、いわゆるリテラル値での条件判定も可能です。しかし、実用的なマクロにおける条件判定では、変数に代入された値を判定することが一般的になりますので、サンプルコードでも変数に代入された値を判定するコードにしています。


サンプルの場合だと、変数のiには数字の1が入っているから、条件判定で必ず一致するね!
Elseがない場合のサンプルコードの実行結果


If[条件式]than~Elseの基本構文:Elseがある場合のサンプルコード
Sub if文の書き方について()
Dim i As Integer
i = 2
If i = 1 Then
MsgBox ("条件に一致した処理を実行中です。")
Else
MsgBox ("変数iは「" & i & "」なので条件に一致していない処理を実行中です。")
End If
End Sub
Elseは、Ifの条件式に一致しない場合に処理が実行されます。使い方のイメージとしては、どの条件にも当てはまらなかった時はこういった処理をしたいを想定して書くと良いでしょう。
サンプルコードの場合、変数iに2を代入しているので必ずElseの処理となります。
Elseがある場合のサンプルコードの実行結果




Elseは、If文で条件判定したもの以外だったときに通るルートとおぼえると良いね!
If文の条件分岐のイメージ
If 条件式 Then 処理A Else 処理B


独学の学習効率でお悩みの人必見!
<動画学習見放題サービス>
初心者にやさしいチューターなら今すぐにはじめられる
■オンラインで学習したい
■プログラミングで副業をはじめたい
■パソコン・エクセルの学習をしたい
If[条件式]than~Elseを使った複数の条件分岐処理の書き方
If[条件式]than~ElseIf~Else基本構文
If[条件式]than~Elseの基本構文に以下を追加することで複数の条件分岐に対応可能です。
If 条件式 Then
条件Aに一致した場合に実行したい処理
ElseIf i = 2 Then
条件Bに一致した場合に実行したい処理
Else
MsgBox ("変数iは「" & i & "」なので条件に一致していない処理を実行中です。")
End If
If[条件式]than~ElseIf~Else基本構文サンプルコード
Sub 複数の条件分岐処理使ったif文の書き方()
Dim i As Integer
i = 2
Debug.Print i
If i = 1 Then
MsgBox ("1番目の条件に一致した処理を実行中です。")
ElseIf i = 2 Then
MsgBox ("2番目の条件に一致した処理を実行中です。")
Else
MsgBox ("変数iは「" & i & "」なので条件に一致していない処理を実行中です。")
End If
End Sub
ElseIf 条件式を含めて変数の値を判定するコードとなります。
サンプルコードの場合は変数iに2を代入していることから必ず2番目の条件に一致した処理が実行されます。
If[条件式]than~ElseIf~Else基本構文サンプルコードの実行結果


If文で複数の条件分岐のイメージ
If 条件式1 Then 処理A ElseIf 条件式2 処理B Then Else 処理C


複数分岐において、条件式1と条件式2のどちらの条件にも一致する場合は、先に書いた分岐の処理(コード)のみ実行されます。
SelectCase文は以下の記事で紹介しています。
If文の条件式で使える演算子の書き方
エクセルVBAのIf文条件式で使える演算子は以下のとおりです。
If文の条件式で使用可能な比較演算子
演算子の書き方 | 意味 |
---|---|
If A>B Then | AはBよりも大きい |
If A<B Then | AはBより小さい |
If A>=B Then | AはB以上 ※以上の場合は同じ値も含む |
If A<=B Then | AはB以下 ※以下の場合は同じ値も含む |
If A=B Then | AとBは同じ |
If A<>B Then | AとBは同じではない |
If文で比較演算子使ったサンプルコード
変数iに代入された値が50よりも小さいか、同じか、大きいかを判定して処理を分岐するコード
複数の分岐処理で上から順に変数iが50よりも小さい数値であるかどうか。次に変数iが50であるかどうか。
最後に変数iが50よりも大きい数値であるかどうかを判定します。
Sub 比較演算子使ったif文の書き方()
Dim i As Integer
i = 50
Debug.Print i
If i < 50 Then
MsgBox ("iが50よりも小さいため処理を実行中です。")
ElseIf i = 50 Then
MsgBox ("iが50であるため処理を実行中です。")
ElseIf i > 50 Then
MsgBox ("iが50よりも大きいため処理を実行中です。")
Else
MsgBox ("どれにも当てはまらないため処理を実行中です。")
End If
End Sub
サンプルコードの場合は変数iに50が代入されていることから上から2番目の処理が実行されます。
エクセルVBA:If文で比較演算子使ったサンプルコードの実行結果


If文の条件式で使用可能な論理演算子
演算子の書き方 | 意味 |
---|---|
If A And B Then | AとBの両方を満たす |
If A Or B Then | AかBかいずれかを満たす |
If Not A Then | Aではない |
If文で論理演算子Andを使ったサンプルコード
If文の条件式でAndを使って〇〇かつ▲▲であるを判定する時の書き方
Sub 論理演算子使ったif文の書き方()
Dim i As Integer
Dim j As String
i = 30
j = "東京"
If i = 30 And j = "東京" Then
MsgBox ("And条件が一致したため処理を実行中です。")
Else
MsgBox ("どれにも当てはまらないため処理を実行中です。")
End If
End Sub
変数iの値と変数jの値を条件式で判定しています。
サンプルコードでは変数「 i 」は30であることかつ、変数「 j 」が東京であるといったAnd条件に一致している処理となります。
※And条件なので、変数iもしくは変数jのどちらかが条件式と異なれば不一致となります。
If文で論理演算子Andを使ったサンプルコードの実行結果


If文で論理演算子Andを使った条件分岐のイメージ
If 条件式1 And 条件式2 処理A Then Else 処理B


If文で論理演算子Orを使ったサンプルコード
If文の条件式でOrを使って〇〇または▲▲であるを判定する時の書き方
Sub 論理演算子使ったif文の書き方()
Dim i As Integer
Dim j As String
i = 1
j = "東京"
If i = 30 Or j = "東京" Then
MsgBox ("Or条件が一致したため処理を実行中です。")
Else
MsgBox ("どれにも当てはまらないため処理を実行中です。")
End If
End Sub
変数iの値が30である。または変数jの値が東京である、そのどちらか一方の条件に一致すればTRUEとなります。
サンプルコードでは変数「 i 」に1を代入しているので条件不一致でFALSEですが、変数「 j 」に東京が代入されているため判定結果はTRUEとなります。
If文で論理演算子Orを使ったサンプルコードの実行結果


If文で論理演算子Orを使った条件分岐のイメージ
If 条件式1 Or 条件式2 処理A Then Else 処理B


If文で論理演算子Notを使ったサンプルコード
If文の条件式でNotを使って〇〇ではない判定をする時の書き方
Sub 論理演算子使ったif文の書き方()
Dim i As String
i = "東京"
If Not i = "神奈川" Then
MsgBox ("Not条件が一致したため処理を実行中です。")
Else
MsgBox ("どれにも当てはまらないため処理を実行中です。")
End If
End Sub
変数iの値が神奈川県かどうかの条件判定をするコードとなります。サンプルコードでは、変数iに東京が代入されているため神奈川ではない。の条件に一致していることから判定結果はTRUEとなります。
If文で論理演算子Notを使ったサンプルコードの実行結果


If文の入れ子(ネスト)について
If文中にIf文を書き込むことをIf文の入れ子(ネスト)と呼び、条件に一致した中から更に条件を絞り込みたい場合などに使います。
If文の入れ子(ネスト)は以下のように書き方やサンプルコードを紹介します。
If文の入れ子(ネスト)の書き方
If 条件式1 Then
条件1に一致した場合に実行したい処理
If 条件式2 Then
条件2に一致した場合に実行したい処理
End If
End If
If条件式1~End Ifの内側にさらにIf条件式2~End If(3行目~5行目)を書き込み入れ子にします。
If文の入れ子(ネスト)の使ったサンプルコード
Sub if文を入れ子にする書き方について()
Dim i As Integer
Dim j As String
i = 1
j = "東京"
If i = 1 Then
MsgBox ("1つ目のIf条件に一致しました。" & vbCrLf & "内側のIFの判定に以降します。")
If j = "東京" Then
MsgBox ("2つ目のIf条件に一致しました。")
Else
MsgBox ("2つ目のIf条件に不一致です。")
End If
Else
MsgBox ("1つ目のIf条件に不一致です。")
End If
End Sub
1つ目のIf条件式で変数iの値を判定しています。判定にてTRUEが返ってきたら処理を実行します。
その後、2つ目(内側)のIf条件式で判定として変数jの値の判定をします。
サンプルコードの場合は変数iは1で変数jは東京となっているので、1つ目も2つ目どちらの条件式にもTRUEが返ってきます。
If文の入れ子(ネスト)の使ったサンプルコードの実行結果




左の画像がサンプルコードの7行目の処理、右の画像が9行目の処理となります。
サンプルの場合は何れも条件判定に一致しているパターンなので画像の処理結果となります。
If文の入れ子(ネスト)にした場合の条件分岐イメージ
If 条件式1 Then 処理A (If 条件式2 Then 処理B Else 処理C) Else 処理D


VBAのIf文で複数の条件分岐をつかった実践例
If文でAndと比較演算子を使って数値の範囲を条件にする使い方
Sub if文の実践編()
'比較演算子と論理演算子を用いて数値の範囲を条件指定する
Dim i As Integer
'任意の数値を入力するインプットボックスを使った処理
i = Application.InputBox("数値を入力してください。", "数値を入力", 50, Type:=1)
If i < 50 Then
MsgBox ("変数iは50より小さいです。")
ElseIf i >= 50 And i < 100 Then
MsgBox ("変数iは50以上100未満です。")
ElseIf i >= 100 Then
MsgBox ("変数iは100より大きいです。")
Else
MsgBox ("いずれも当てはまりません")
End If
End Sub
変数iの値を判定するIf文ですが、実践レベルとしてよく使われるのは8行目の条件式です。
比較演算子の>=、<と論理演算子を合わせて変数iの値が50以上~100未満であるかの判定をしています。
If文でAndと比較演算子を使って数値の範囲を条件のイメージ
50以上100未満の例


InputBoxの使い方については別の記事で紹介しています。
If文でOrと比較演算子を使って数値の範囲を条件にする使い方
Sub if文の実践編2()
'比較演算子と論理演算子を用いて数値の範囲を条件指定する
Dim i As Integer
'任意の数値を入力するインプットボックスを使った処理
i = Application.InputBox("数値を入力してください。", "数値を入力", 50, Type:=1)
Debug.Print i
If i < 25 Or i > 75 Then
MsgBox ("変数iは25より小さいか75より大きいです。")
ElseIf i >= 25 And i <= 75 Then
MsgBox ("変数iは25以上75以下です。")
Else
MsgBox ("いずれも当てはまりません")
End If
End Sub
変数iの値を判定するIf文ですが、こちらはOrを使った範囲指定となります。
サンプルコードの7行目で変数iの値が25より小さいか75よりも大きいかの条件を指定しています。
If文でOrと比較演算子を使って数値の範囲を条件のイメージ
25より小さいまたは75よりも大きいの例


If文を入れ子(ネスト)にして実践的な条件式にする使い方
If文を入れ子(ネスト)にした条件式で判定してセルに値を入力してみます。
サンプルとして以下の表を使って条件判定と判定結果に応じた処理を実行してみます。


商品リストに在庫数と月間の平均販売数が入力されていたとします。
この表で発注の緊急度をエクセルVBAのIf文で条件判定し発注フラグの列に記入する処理を実行します。
緊急度は低いものから順に「記入なし」→「要観察」→「要注意」→「注意」→「至急!」です。
Sub if文の実践編3()
'IF文を入れ子にして複数条件判定をする
If ActiveSheet.Cells(2, 3).Value <= 0 Then
ActiveSheet.Cells(2, 6).Interior.ColorIndex = 3
ActiveSheet.Cells(2, 6) = "至急!"
Else
If (ActiveSheet.Cells(2, 3) / ActiveSheet.Cells(2, 4)) * 100 >= 100 And _
(ActiveSheet.Cells(2, 3) / ActiveSheet.Cells(2, 4)) * 100 < 150 Then
ActiveSheet.Cells(2, 6).Interior.ColorIndex = 46
ActiveSheet.Cells(2, 6) = "要観察"
ElseIf (ActiveSheet.Cells(2, 3) / ActiveSheet.Cells(2, 4)) * 100 >= 50 And _
(ActiveSheet.Cells(2, 3) / ActiveSheet.Cells(2, 4)) * 100 < 100 Then
ActiveSheet.Cells(2, 6).Interior.ColorIndex = 45
ActiveSheet.Cells(2, 6) = "要注意"
ElseIf (ActiveSheet.Cells(2, 3) / ActiveSheet.Cells(2, 4)) * 100 >= 1 And _
(ActiveSheet.Cells(2, 3) / ActiveSheet.Cells(2, 4)) * 100 < 50 Then
ActiveSheet.Cells(2, 6).Interior.ColorIndex = 44
ActiveSheet.Cells(2, 6) = "注意"
End If
End If
End Sub
~コード解説~
[3行目]
・条件式:A商品の在庫が0以下であるかを判定
・処理:発注フラグセルには「至急!」を記入し、セル色を赤色に変更
[7~8行目]
・条件式:A商品の在庫を平均販売数で割った値が何パーセントかを計算し、結果が100%以上150%未満かを判定
・処理:発注フラグセルに「要観察」を記入、セル色を黄色に変更。
[11~12行目]
・条件式:A商品の在庫を平均販売数で割った値が何パーセントかを計算し、結果が50%以上100%未満かを判定
・処理:発注フラグセルに「要注意」を記入、セル色を薄いオレンジに変更。
[15~16行目]
・条件式:A商品の在庫を平均販売数で割った値が何パーセントかを計算し、結果が1%以上50%未満かを判定
・処理:発注フラグセルに「注意」を記入、セル色をオレンジに変更。
If文を入れ子(ネスト)にして実践的な条件式にするサンプルコードで実現したい結果としては以下のとおりです。


この記事が役に立ったと感じていただけた人は是非フォローお願いします。
![]() ![]() にほんブログ村 | ![]() ![]() |
コメント