サイトアイコン エントレ|演劇動画ニュース

エクセルマクロ(EXCEL VBA) その7 Ifで条件分岐(If)

エクセルマクロ(EXCEL VBA)

Ifを使った条件分岐

その5

その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)

(文:森脇孝/エントレ)

モバイルバージョンを終了