IF文を使った条件分岐
EXCEL VBAの基本コードを紹介しています。初心者の方が順番に読んでくだけでVBAの基礎コードが理解出来るようになればなと思って、短めの記事で進めて行きたいと思います!
今回は、”IF文を使った条件分岐”について紹介します!
IF文と条件分岐
例えば、次のEXCELシートで、こんな処理をするプログラムを考えてみましょう。
B3セルが”YES”だったら、D3セルに「イヤッホー!」と表示させる
まずは日本語で考えてみます。
- EXCELファイルを取得する
- EXCELシートを取得する
- B3セルを取得する
- B3セルの値を取得する
- B3セルの値が"YES"かどうか判断する
- YESの場合
- D3セルを取得する
- D3セルに「イヤッホー!」を設定する
- YESでない場合
- 何もしない
- YESの場合
こんな感じでしょうか。
5の「B3セルの値が”YES”かどうか判断する」の部分がIF文を使う部分です。ある値が何か判断してその後の処理を分けるところですね。
先に、上の日本語をプログラムに直します。
Sub test()
'1.EXCELファイルを取得する
Dim wb As Workbook: Set wb = ActiveWorkbook
'2.EXCELシートを取得する
Dim sheet As Worksheet: Set sheet = wb.Sheets("Sheet1")
'3.B3セルを取得する
Dim rngB3 As Range: Set rngB3 = sheet.Range("B3")
'4.B3セルの値を取得する
Dim valB3 As String: valB3 = rngB3.Value
'5.B3セルの値が"YES"かどうか判断する
If valB3 = "YES" Then
'YESの場合
'1.D3セルを取得する
Dim rngD3 As Range: Set rngD3 = sheet.Range("D3")
'2.D3セルに「イヤッホー!」を設定する
rngD3.Value = "イヤッホー!"
Else
'YESでない場合
'1.なにもしし
End If
End Sub
IF文の構文
If 条件式 Then
条件式が”true”のときに実行する処理
Else
条件式が”false”のときに実行する処理
End If
先程のコードに照らし合わせると次のようになりますね。
IF文を使ってこのようにすることで、ある条件に合わせてその後のプログラムを分けることが出来るようになります。
ちなみに、”else”に処理がない場合は、省略して次のように書いてもOKです。
'5.B3セルの値が"YES"かどうか判断する
If valB3 = "YES" Then
'YESの場合
'1.D3セルを取得する
Dim rngD3 As Range: Set rngD3 = sheet.Range("D3")
'2.D3セルに「イヤッホー!」を設定する
rngD3.Value = "イヤッホー!"
End If
スッキリですね。
では実際に動かした動画で動きを確認してみましょう。
B3セルを”YES”にした場合と、そうでない場合で比べています。
B3セルが”YES”のときだけD3セルに”イヤッホー!”が入力されるのが分かります。
複数の条件がある場合
次のように条件が複数ある場合の場合分けの方法です。
B3セルが”YES”だったら、D3セルに「イヤッホー!」
B3セルが”NO”だったら、D3セルに「おっと~」と表示させる
複数条件がある場合の構文
If 条件式1 Then
条件式1が”true”のときに実行する処理
ElseIf 条件式2 Then
条件式2が”true”のときに実行する処理
Else
条件式がいずれも”false”のときに実行する処理
End If
このように、「ElseIf 条件式 Then」で条件を追加します。
Sub test()
Dim wb As Workbook: Set wb = ActiveWorkbook
Dim sheet As Worksheet: Set sheet = wb.Sheets("Sheet1")
Dim rngB3 As Range: Set rngB3 = sheet.Range("B3")
Dim valB3 As String: valB3 = rngB3.Value
'B3セルの値が"YES"かどうか判断する
If valB3 = "YES" Then
'YESの場合
Dim rngD3 As Range: Set rngD3 = sheet.Range("D3")
rngD3.Value = "イヤッホー!"
ElseIf valB3 = "NO" Then
Dim rngD3 As Range: Set rngD3 = sheet.Range("D3")
rngD3.Value = "おっと~"
Else
'YESでない場合
'1.なにもしない
End If
End Sub
実際に動かしてみましょう。
うまく動きましたね^_^
もちろん、この場合も、最後の”Else”に処理がなければ省略できます。
Sub test()
Dim wb As Workbook: Set wb = ActiveWorkbook
Dim sheet As Worksheet: Set sheet = wb.Sheets("Sheet1")
Dim rngB3 As Range: Set rngB3 = sheet.Range("B3")
Dim valB3 As String: valB3 = rngB3.Value
'B3セルの値が"YES"かどうか判断する
If valB3 = "YES" Then
'YESの場合
Dim rngD3 As Range: Set rngD3 = sheet.Range("D3")
rngD3.Value = "イヤッホー!"
ElseIf valB3 = "NO" Then
Dim rngD3 As Range: Set rngD3 = sheet.Range("D3")
rngD3.Value = "おっと~"
End If
End Sub
比較演算子
ここまでに使ってきた条件式”If 条件式 Then”の条件式の部分
valB3 = “YES”
とかですが、ここで出てくる「=」のような記号のことを、”比較演算子”と言います。
「=」は代入演算子としも利用されていますが、条件式に使う場合は比較演算子となります。
IF文では、条件式が「真(true)」なのか「偽(false)」を判断してそのごの分岐を行っているのですが、”比較演算子”を利用することで様々な条件を設定出来るようになります。
比較演算子の一覧
比較演算子 | 説明 |
---|---|
= | 左辺と右辺が等しければ”true” |
<> | 左辺と右辺が等しくなければ”true” |
< | 左辺のがうへんより小さければ”true” |
<= | 左辺が右辺以下であれば”true” |
> | 左辺がうへんより大きければ”true” |
>= | 左辺が右辺以下であれば”true” |
上の表のように、比較演算子には様々な種類があります。数学でもおなじみのものもありますね^_^
条件式は単体でメッセージボックスの引数に入れると”true”か”false”が返ってくるので、色々と試してみましょう。
Sub test()
Dim a As Integer: a = 10
Dim b As Integer: b = 10
Dim c As Integer: c = 5
Dim e As String: e = "10" '文字列型
MsgBox a = b ' True
MsgBox a <> b ' False
MsgBox a <> c ' True
MsgBox a <= b ' True
MsgBox a = e ' True
End Sub
実行動画
大体感覚的に分かると思いますが、最後の「a=e」は注意が必要です。
「a」は数値型、「e」は文字列型で指定しているのですが、「a=e」は「True」になります。型が違っても同一であると認識されているんですね。
論理演算子
もうひとつ、条件式を作る上で欠かせないのが、この”論理演算子“です。聞き慣れない言葉だと思いますが、これも数学でよく出てくるものです。
「AかつB」「AまたはB」みたいなことを数学でもやったと思いますが、それです。
次のような種類があります。
論理演算子の一覧
論理演算子 | 説明 |
---|---|
And | 左辺と右辺が両方とも”true”なら”true” |
Or | 左辺と右辺のどちらかが”true”なら”true” |
Not | 条件式の真偽を反転させる(論理否定) |
「And」が「かつ」、「Or」が「または」ですね。「Not」は数学では出てこないですかね。
条件式1 And 条件式2
条件式1 Or 条件式2
Not 条件式1
「Not」は条件式の前に付けるので注意してください。
これも試してみましょう
Sub test()
Dim a As Integer: a = 10
Dim b As Integer: b = 10
Dim c As Integer: c = 5
Dim e As String: e = "10"
MsgBox a = b And a = e ' True
MsgBox a = b Or a = c ' True
MsgBox Not a = c ' True
End Sub
実行動画
1番目はいずれも”True”なので”True”ですね。
2番目の「a=b Or a=c」については、条件式1・条件式2のいずれかが”True”なら”True”なので、この場合、条件式2は”False”ですが、条件式1が”True”なので”True”になっています。
3番目の「Not a=c」は「a=c」の否定なので、「aとcは同じではない」なので”True”が返されます。
まとめ
このように、条件分岐を組み合わせながら、実行したい作業を実現するためのプログラムを作っていきます。こういう構文を制御構文と言いますが、この制御構文が「マクロの記録」では実行できない部分になりますので「いよいよプログラミンしてる!」って感じになって来ますね^_^
次回以降では、他にもある”制御構文”について解説していきます!
コメント