この記事を読むのに必要な時間は約 6 分です。
条件分岐と言えばIF文です。
シート内で使う関数にもIFってありますよね。
IF(条件式, Trueの場合, Flaseの場合) のように、当てはまる場合とそうでない場合の2パターン絶対必要でした。
VBAのIF文は、当てはまる場合だけとか、条件式を数パターン書いたりと、いろいろな書き方が出来ます。
大きく分けて3つの書き方を紹介します。
その場面に合わせて、都合の良いやり方を選んでくださいね。
目次(リンク)
IF文の書き方
IF文の書き方にもいろいろあります。
- If ~ Then End If、1行で書く
- Else を使う
- Else Ifを使う
条件が1つの場合、2つの場合、3つ以上の場合に分けることが出来ます。
条件が1つの場合
条件が1つだと、当てはまれば処理されて、当てはまらなければスルーされます。
If ~ Then End if で書く
構文としてはこんな感じです。
If 条件式 Then
処理内容
End If
条件式がTrueになる場合、処理内容のところが実行されます。
数字ならTrueを返す、IsNumericを使ってIf文を書いてみました。
ソースコードはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 |
'If ~ Then End If Public Sub if_then_Test01() Dim sTest As String sTest = "10" If IsNumeric(sTest) Then MsgBox "数字です" End If End Sub |
”10”は全角の数字なので、IsNumericは数字扱いしてくれてTrueとなりました。
If文の中を通り、書いていたメッセージボックスが表示されました。
今度は数字にならない文字を書いてみます。
1 2 3 4 5 6 7 8 9 10 11 12 |
'If ~ Then End If Public Sub if_then_Test01() Dim sTest As String sTest = "あああ" If IsNumeric(sTest) Then MsgBox "数字です" End If End Sub |
数字じゃないので、IF文の中を通らずスルーされる想定です。
やはりステップ実行でスルーされました。
If文を1行で書く
当てはまる場合の処理が1ステップだけなら、1行で書くことも出来ます。
1 2 3 4 5 6 7 8 9 |
Public Sub if_then_Test01() Dim sTest As String sTest = "1122" If IsNumeric(sTest) Then MsgBox "数字です" End Sub |
数字なので条件に当てはまり、メッセージボックスが表示されました。
If ~ Then Exit Sub のような書き方もよくあります。
複数条件がある場合
複数条件がある場合、Elseを使います。
Elseを使う
当てはまる、当てはまらないの2パターンならElseです。
先ほどは当てはまらない場合、スルーされてしまいました。
でも今回は違うってところを見せてやりましょう!
IsNumericはFalseになって、Else側に行く想定です。
想定通り、Elseに行きました。
Else側のメッセージボックスも表示されました。
スルーされなくて良かったです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'If ~ Then Else End If Public Sub if_then_Test01() Dim sTest As String sTest = "あああ" If IsNumeric(sTest) Then MsgBox "数字です" Else MsgBox "数字じゃないです" End If End Sub |
ElseIfを使う
3パターン以上分岐するならElseIfです。
日本語で書くとこんな感じ、
If 条件式 Then
処理内容
ElseIf 条件式 Then
処理内容
End If
ElseIfでたくさん直列に繋げて書くことも出来ます。
最後だけ条件式無しで、Elseだけもありです。
日付の場合Trueを返すIsDateも使って、3パターンの分岐を用意しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
'If ~ Then Else End If Public Sub if_then_Test01() Dim sTest As String sTest = "2018/11/22" If IsDate(sTest) Then MsgBox "日付です" ElseIf IsNumeric(sTest) Then MsgBox "数字です" Else MsgBox "数字じゃないです" End If End Sub |
実際に動かしてみます。
日付と判断され、最初の分岐に入りました。
次は、日付だとは判断されず、2番目の分岐に入りました。
もちろん、日付でも数字でも無ければ最後のElseに入ります。
まとめ:IF文の書き方3つ、If ~ Then、 ElseIf
VBAでのIF文の書き方を紹介しました。
条件が1つの場合もあれば、ElseやElseIfで複数の条件分岐をさせることも出来ます。
個人的には、1行で書くやり方を知った時は衝撃的でした。
「あれ、End Ifはどこに行った??」と思って探しました(笑)
上手くコーディングするために、どんな条件で分岐させるかは悩みどころでもあり、面白いところだと思います。
IF文はよく使うので、ぜひ慣れていってくださいね。
最後までお読みいただき、ありがとうございました。