【VBA入門】If文で条件分岐を行う方法

※こちらの記事は、プロスタ編集部が現在大変人気の高いVBAのコーディング記事を公開することで、皆様の学習にお役に立ちたい意図で投稿しております。
参考サイト：[【VBA入門】If文で条件分岐を行う方法](http://programming-study.com/technology/vba-if/)

#【VBA入門】If文で条件分岐を行う方法

If文で条件分岐を行う方法についてご説明します。Ifを使用するとコードの流れを変更することが可能になるのでより柔軟な状況に対応できるプログラムを作成することができます。

```
<pre class="lang:default decode:true ">If　条件式　Then
		条件を満たした場合に実行するコード
End　If</pre>
```

目次 
1 [If文で条件付けを行う](##If文で条件付けを行う)
1.1 [Elseで条件に満たなかった場合の処理を実施](###Elseで条件に満たなかった場合の処理を実施)
1.2 [If文を入れ子にする](###If文を入れ子にする)
2 [条件式の論理演算子](##条件式の論理演算子)
2.1 [AND(論理積)による条件の結合](###AND(論理積)による条件の結合)
2.2 [OR(論理和) による条件の結合](###OR(論理和) による条件の結合)
2.3[NOT(論理否定)による条件設定](###NOT(論理否定)による条件設定)
2.4 [複数の論理演算子による複合的な条件の結合](###複数の論理演算子による複合的な条件の結合)
3 [まとめ](##まとめ)

##If文で条件付けを行う

```
If Range("A1") <= 6 Then
   		 MsgBox "上半期のシートです。"
End If
```

＜実行例＞
![VBA1.png](https://qiita-image-store.s3.amazonaws.com/0/152507/c3c50269-71cd-053b-f27c-ae7871868154.png)

###Elseで条件に満たなかった場合の処理を実施

If文に続けてElseを記述することにより、条件式に適合しなかった場合の処理を行うことができます。

```
If Range("F4") >= 20 Then
    		MsgBox "ご購入ありがとうございます。"
Else
    		MsgBox "20歳未満の方にはご購入できない商品が含まれています。"
End If
```

＜実行例＞
![VBA2 .png](https://qiita-image-store.s3.amazonaws.com/0/152507/5f87f19d-335b-2ca1-b6de-39f6e1456ea0.png)

また、Else文の後にIfで条件を記述することもできます。

```
If 年齢 >= 20 Then
            MsgBox "選挙権があります。"
ElseIf 年齢 >= 18 Then
            MsgBox "2016年夏より投票することができます。"   '年齢が20未満かつ18以上の場合'
Else
    　　　　MsgBox "選挙権がありません。"   '年齢が18未満の場合'
End If
```

###If文を入れ子にする

If文の中にIf文を記述することもできます。この場合入れ子になったIf文中のコードは外側のIf文の条件も満たしている場合に実行されます。

```
If Range("B2") >= 4 Then
    		If Range("E4") = "男" Then
            		MsgBox "高学年の男子です。"
    		Else
            		MsgBox "高学年の女子です。"
    		End If
    
Else
    		MsgBox "低学年生です。"
End If
```

＜実行例＞
![VBA3 .png](https://qiita-image-store.s3.amazonaws.com/0/152507/491e75e1-ef94-2b50-2f56-db49dc404805.png)

なお、If文を多重にするとコードが見づらくなるのでTabキーなどで適宜字下げを行うと良いでしょう。

##条件式の論理演算子

If文に2つ以上の条件を設定する方法についてご説明します。
複数の条件を設定することができればデータの抽出・加工をする際に非常に便利です。
それでは詳しい方法について確認していきましょう。

##AND(論理積)による条件の結合

2つの条件の間をANDでつなげることにより、両方の条件を満たしている場合にコードが実行されます。

```
If IsDate(Range("C4")) And Range("D4") = "第二回" Then  'セルに入力された値が日付であり、かつ備考欄が第二回の場合'
    MsgBox "第二回の受講が可能です。"
End If
```

＜実行例＞
![VBA4.png](https://qiita-image-store.s3.amazonaws.com/0/152507/635627d9-e0d2-980d-b6b2-f3c0bbf20342.png)


###OR(論理和) による条件の結合

2つの条件の間をORでつなぐことにより、どちらかの条件を満たしている場合にコードが実行されます。

```
If Range("C7") = "土" Or Range("C7") = "日" Then    'セルに入力された値が土曜または日曜の場合'
     MsgBox "休日です。"
 Else
     MsgBox "平日です。"
 End If
```

＜実行例＞
![VBA5 .png](https://qiita-image-store.s3.amazonaws.com/0/152507/bdaf990f-f971-633a-edf8-7aa145a533b3.png)


###NOT(論理否定)による条件設定

条件の左にNOTを指定すると、条件を満たしていない場合にコードが実行されます。

```
If Not IsDate(Range("C4")) Then    'セルに入力された値が日付ではない場合'
    MsgBox "免許を取得していません。"
Else
    MsgBox "免許取得日：" & Range("C4")
End If
```

＜実行例＞
![VBA7.png](https://qiita-image-store.s3.amazonaws.com/0/152507/e3ee363f-e58a-da7e-bfa0-47d72f789184.png)


##複数の論理演算子による複合的な条件の結合

論理演算子を複数組み合わせて複雑な条件式を作成することも可能です。


```
If Range("C5") >= 10 And Not Range("D5") = "セット対象外" Then '在庫が10以上であり、かつ備考欄がセット対象外ではない場合'
    MsgBox "10個セット販売が可能です。"
End If
```


＜実行例＞
![VBA6 .png](https://qiita-image-store.s3.amazonaws.com/0/152507/bcf5daa6-5cdc-7517-827b-d5d4b086b2d2.png)


まとめ

If文を使用すると複雑な条件に対応したコードを記述できるようになります。また意図しない動作を行わないために条件設定に漏れが無いか事前に検討しておくことも非常に大切です。
AND・OR・NOTの3つの論理演算子により様々な条件を設定することができますが、コードが読みづらいとメンテナンスが困難になりミスを誘発する原因にもなります。必要な箇所はコメントを記述し、意図が分かりやすいコードとなるよう心掛けましょう。