今度は、合計金額が1,000以上のものに「〇」をつけていきましょう。
ある条件で処理を分岐させたい時、便利なのが if文になります。
if文について
if文の使い方は以下になります。
If 条件式 Then
処理
End If
条件式を与えて結果が正しければ処理に移り、正しくなければif文外の次のコードに移ります。
例えば、以下のコードを実行すると合計価格を算出しながら1000以上の場合にセルに「〇」が入力されます。
For i = 2 To 5 '2行目から5行目までループ
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value '各果物の合計価格
If ws.Cells(i, 4).Value >= 1000 Then '各果物の合計価格が1000以上だった場合
ws.Cells(i, 5).Value = "〇" '〇と入力
End If
Next i
この「ws.Cells(i, 4).Value >= 1000」が条件式で、この結果が正しい場合、処理「ws.Cells(i, 5).Value = “〇”」が実行された形になります。逆に条件式を満たさない場合は、この処理は実行されません。
比較演算子
条件式では2つの値を比較して、結果が正しいか・正しくないかを表します。
比較に使う記号(比較演算子)の中でも特によく使うものについて、変数 xとyを比較した時を例にまとめます。
- x = y → xとyは等しい
- x >= y → xはy以上
- x > y → xはyより大きい
- x <= y → xはy以下
- x < y → xはyより小さい
- x <> y → xとyは等しくない
例えば以下のコードを実行すると、条件式が正しいと「True」になり、正しくないと「False」と結果が返ってきます。
MsgBox 5 > 1 'True
MsgBox 5 < 1 'False
if文では条件式が「true」だと処理が実行され、「false」だと処理が実行されずにif文外の次のコードに移行する動きになります。
Like演算子
Like演算子という便利な記号もあります。その中でも特に使うものを紹介します。
- ? → 任意の1文字
- # → 任意の1桁の数値(0~9)
- * → 0文字以上の文字
「?」は文字列の数を調べるときによく使います。
Dim hoge As String
hoge = "もも"
If ws.Cells(i, 1).Value Like "??" Then
MsgBox "hogeは2文字"
End If
「#」は数字の桁数を調べるときに使います。
Dim hoge As Integer
hoge = 303
If hoge Like "###" Then
MsgBox "hogeは3桁"
End If
「*」は使い方にコツが要りますが、以下のように使います。
Dim hoge As String
hoge = "ぶどう"
If hoge Like "ぶ*" Then
MsgBox "文字の先頭が「ぶ」"
End If
If hoge Like "*ぶ*" Then
MsgBox "文字列内に「ぶ」が入っている"
End If
If hoge Like "*う" Then
MsgBox "文字の末尾が「う」"
End If
if文のネスト
例えば、合計価格が1,000以上で10,000未満のセルだけに「〇」をつけたい時、if文をネストして使います。
For i = 2 To 5 '2行目から5行目までループ
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value '各果物の合計価格
If ws.Cells(i, 4).Value >= 1000 Then '各果物の合計価格が1000以上だった場合
If ws.Cells(i, 4).Value < 10000 Then '各果物の合計価格が10000未満だった場合
ws.Cells(i, 5).Value = "1000以上10000未満"
End If
End If
Next i
ネストしすぎると見にくくなるので、論理演算子という特殊な文字列を使って書くこともできます。
論理演算子
上のネストをした例ですが、論理演算子の「And」を使うと以下のように書き換えられます。
For i = 2 To 5 '2行目から5行目までループ
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value '各果物の合計価格
If ws.Cells(i, 4).Value >= 1000 And ws.Cells(i, 4).Value < 10000 Then '各果物の合計価格が1000以上10000未満の場合
ws.Cells(i, 5).Value = "1000以上10000未満"
End If
Next i
上の例では「And」(かつ)を使いましたが、論理演算子には以下の3つがあります。
- And → かつ
- Or → または
- Not → 否定
Andを使った以下の例では、変数 hogeに「ぶ」かつ「う」の両方の文字が入っていると条件式が trueになります。
Dim hoge As String
hoge = "ぶどう"
If hoge Like "*ぶ*" And hoge Like "*う*" Then
MsgBox "hogeには「ぶ」と「う」が含まれる"
End If
Orを使った以下の例では、変数 hogeに「ぶ」または「う」のどちらかの文字が入っていると条件式が trueになります。
Dim hoge As String
hoge = "ぶどう"
If hoge Like "*り*" Or hoge Like "*う*" Then
MsgBox "hogeには「り」または「う」が含まれる"
End If
Notを使った以下の例では、変数 hogeが「もも」ではない場合に条件式が trueになります。比較演算子を使うと、「hoge <> “もも”」と条件式を書き換えても結果は同じになります。
Dim hoge As String
hoge = "ぶどう"
If Not hoge = "もも" Then
MsgBox "hogeはももではない"
End If
ElseIf
条件を複数設定し、それぞれ別の処理をしたい場合があります。そんな時は【ElseIf】を使います。
例えば、「合計価格が1,000以上10,000未満の場合」と「10,000以上の場合」とで処理を分けたい時、以下のように記述できます。
For i = 2 To 5 '2行目から5行目までループ
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value '各果物の合計価格
If ws.Cells(i, 4).Value >= 1000 And ws.Cells(i, 4).Value < 10000 Then '合計価格が1000以上10000未満の場合
ws.Cells(i, 5).Value = "1000以上10000未満"
ElseIf ws.Cells(i, 4).Value >= 10000 Then 'の合計価格が10000以上の場合
ws.Cells(i, 5).Value = "1000以上10000未満"
End If
Next i
Else
【Else】を使うと、ifやelseIfの全ての条件に当てはまらない場合、else内の処理が実行されます。
例えば、「合計価格が1,000以上10,000未満の場合」と「10,000以上の場合」とで処理を分け、それ以外の価格は「1000未満」とセルに出力する際、以下のように記述できます。
For i = 2 To 5 '2行目から5行目までループ
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value '各果物の合計価格
If ws.Cells(i, 4).Value >= 1000 And ws.Cells(i, 4).Value < 10000 Then '合計価格が1000以上10000未満の場合
ws.Cells(i, 5).Value = "1000以上10000未満"
ElseIf ws.Cells(i, 4).Value >= 10000 Then '合計価格が10000以上の場合
ws.Cells(i, 5).Value = "10000以上"
Else '上記以外の場合
ws.Cells(i, 5).Value = "1000未満"
End If
Next i
最後に
今回のif文と、前回のfor文とを組みわせることで、今後いろいろな処理ができるようになります。
次回はfor文と相性のいい配列の基本についてまとめようと思います。
