Ifを使った条件分岐
、その6でFor Nextを使った繰り返し作業を学びました。
今回は、For Nextと共にとても重要な If を使った条件分岐についてご紹介します。
もし○○だったら、△△する
というように、条件によってセルに書き込むものを変えることができます。
例えば、公演チケットの券売状況を記した表があったとします。
80%以上であれば「好調!」
と入れられるようなものを作ってみましょう。
まずは、開発→Visual Basic
挿入→標準モジュールとして、
sub kenbai_hantei
と入力してエンターを押します。
※マクロの始め方は、その2をご参照ください。
F2のセルを狙いたいので、Cellsで表現すると
Cells(2, 6)ですね。
cells(2,6) = "好調!"
と打って、合ってるか確かめてみましょう。
これを実行すると、
うまくF2のセルに「好調!」と打ち込めましたね。
でも、このままでは条件もなにもない状態なので、
続いて「80%以上の時に、好調!と打つ」という条件を記載していきましょう。
今のコードの前後にこういう感じに打ち込んでください。
If Cells(2, 5) >= 0.8 Then
Cells(2, 6) = "好調!"
End If
上の赤線で記した行は、
Cells(2, 5)・・・ここでは94%となっているところです。
それが、 >= 0.8 ・・・80%以上だったら、と書いているわけです。
その後に必ず Then という文言が必要です。
そして、次の Cells(2, 6) = “好調!” は、もしCells(2, 5)が80%以上だったら実行する内容です。
実行する内容を書いた後に、
青線で書いてあるEnd Ifで締めるというのが、If文の書き方のルールです。
これを実行すると
試しに、表の方を修正して80%になるようにしてみましょう。
ちょっと心が痛みますが、券売を60にして、割合が75%になるようにしてみます。
これで同じマクロを実行してみてください。
何も書かれませんよね?
残念ながら80%に届いていないので、何も書かれないということでマクロの動作としては正解です。
ということで、Ifがうまく記述できたので、これを2行目から4行目まで、For Nextを使って繰り返しましょう。
Cells(2, 6)や、Cells(2, 7)となっている 2 のところが、2, 3, 4という感じで繰り返せばいいので、i で置き換えると
For i = 2 To 4
If Cells(i, 5) >= 0.8 Then
Cells(i, 6) = "好調!"
End If
Next
ってことですね。
これを実行すると
千穐楽だけ「好調!」と入りました!
どうでしょう。うまく行きましたでしょうか?
実際80%以上の時だけうまく実行できるかどうか、券売数を変更して試してみてください。
ところで、60%以上の時には「もう少し!」と入れたくて、
さらに60%未満の時には「がんばれ!」と入れたいときにはどうしたらいいでしょう。
それが実現できる ElseIf という呪文を次回ご紹介します。
今回の最終的なコード
Sub kenbai_hantei()
For i = 2 To 4
If Cells(i, 5) >= 0.8 Then
Cells(i, 6) = "好調!"
End If
Next
End Sub
宿題-7
同じ表を使って、13:00開演の公演の場合は、判定の欄に「マチネ」
18:00開演の公演の場合は、判定の欄に「ソワレ」と入るようにしてください。
解説
2行目に注目して、
もしB2が「13:00」だったらF2に「マチネ」と入れるとマクロで表現すると
If Cells(2, 2) = "13:00" Then
Cells(2, 6) = "マチネ"
End If
となるわけですが、実際に実行してみるとうまく行きません。
これは、「13:00」が、13:00:00という時刻を表す形式になっていて、ユーザー定義として13:00に見えている ということのようです。ややこしいのですが、普通にエクセルで13:00と打つとそうなるので、しょうがないので受け入れましょう。
ということで、Ifで比較する際に、TimeValueという関数を使います。これを使うと「13:00」という文字列を時刻のフォーマットにできるので、マクロさんも時刻だと思って比較してくれるはずです。
If Cells(2, 2) = TimeValue("13:00") Then
Cells(2, 6) = "マチネ"
End If
これで、うまく判定できるようになったので、For Nextで2行目から4行目まで繰り返します。
For i = 2 To 4
If Cells(i, 2) = TimeValue("13:00") Then
Cells(i, 6) = "マチネ"
End If
Next
続けて、ソワレについても同じように書けば実現できます。
For i = 2 To 4
If Cells(i, 2) = TimeValue("18:00") Then
Cells(i, 6) = "ソワレ"
End If
Next
ということで、
最終的なコードはこちらです。
Sub hw07_hantei()
For i = 2 To 4
'13:00を時刻フォーマットに変換してから比較
If Cells(i, 2) = TimeValue("13:00") Then
Cells(i, 6) = "マチネ"
End If
Next
For i = 2 To 4
If Cells(i, 2) = TimeValue("18:00") Then
Cells(i, 6) = "ソワレ"
End If
Next
End Sub
エクセルマクロ(EXCEL VBA) その8 ElseIfを使った条件分岐(If ElseIf)
(文:森脇孝/エントレ)