目次:
- 次のルーチンは、オプションのElse節を持たないIf-Then構造を示しています:
- Sub GreetMe3()Time <0. 5の場合、MsgBox "Good Morning" Else _ MsgBox "Good Afternoon" End Sub
- このような小さなルーチンでは、実行速度を心配する必要はありません。しかし、速度が重要な大規模なアプリケーションでは、If-Then構造の別の構文について知っておく必要があります。
- Sub ShowDiscount()Dim Quantity As Long Quant Discount As Double Quantity = InputBox( "Quantity:")Quantity > 0 Then Discount = 0 1 Quantity> = 25ならばDiscount = 0.15 Quantity> = 50ならばDiscount = 0. 2 Quantity> = 75ならばDiscount = 0. 25 MsgBox "Discount:"&Discount End Sub
ビデオ: 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門 2024
If-ThenはVBAの最も重要な制御構造です。おそらく、毎日このコマンドを使用します。条件付きで1つ以上のステートメントを実行する場合は、If-Then構造を使用します。オプションのElse節が含まれている場合は、テストしている条件が ではなく の場合に1つ以上のステートメントを実行できます。 If-Then-Else構造を使用するためにコード化された簡単なCheckUserプロシージャを次に示します。
<! UserName = InputBox( "あなたの名前を入力:")UserName = "Satya Nadella" Then MsgBox( "Welcome Satya …") '… [その他のコードはこちら] … Else MsgBox "ごめんなさい。 Satya Nadellaだけがこれを実行できます。 "End If End SubIf-Thenの例
次のルーチンは、オプションのElse節を持たないIf-Then構造を示しています:
Sub GreetMe()Time <0. 5の場合、MsgBox" Good Morning "End Sub
GreetMeプロシージャは、VBAのTime関数を使用してシステム時刻を取得します。現在の時刻がより小さい場合。図5に示すように、ルーチンはフレンドリーな挨拶を表示する。 Timeがより大きいか等しい場合。 5であれば、ルーチンは終了し、何も起こらない。
<! - 2 - > <! - 1 - >
時間が[以上]の場合、別の挨拶を表示する。Sub GreetMe2()Time = 0の場合5 Then MsgBox "Good Afternoon" End Sub
> =(より大きいか等しい)に注意してください。 2番目のIf-Thenステートメントに使用されます。これにより、1日全体がカバーされます。 (より大きい)が使用されていた場合、この手順が正午12時に実行された場合、メッセージは表示されませんでした。それはかなりありそうもないですが、このような重要なプログラムでは、チャンスを取ることを望んでいません。
Sub GreetMe3()Time <0. 5の場合、MsgBox "Good Morning" Else _ MsgBox "Good Afternoon" End Sub
この行は、前の例では継続文字(アンダースコア)が使用されています。 If-Then-Elseステートメントは、実際には単一のステートメントです。 VBAは、End Ifステートメントを使用するIf-Then-Else構文を少し異なる方法でコーディングする方法を提供します。したがって、GreetMeプロシージャは
<! MsgBox "Good Morning" Else MsgBox "Good Afternoon" End If End Sub
実際には、以下の文をいくつでも挿入することができます: - >
Sub GreetMe4() Else部分の一部および任意の数の文。この構文は読みやすく、ステートメントが短くなります。GreetMeルーチンを拡張して、午前、午後、および夕方の3つの条件を処理する必要がある場合はどうなりますか? 2つのオプションがあります:3つのIf-Thenステートメントを使用するか、
入れ子になった
If-Then-Else構造を使用します。 ネスティング は、If-Then-Else構造を別のIf-Then-Else構造内に配置することを意味します。 3つのIf-Thenステートメントを使用した最初のアプローチは、より簡単です。 Sub GreetMe5()時間= 0.5の場合のDim Msg As String 5と時間= 0.75 Then Msg = "Evening" MsgBox "Good"&Msg End Sub 変数を使用して新しいひねりが追加されました。 Msg変数は、時刻に応じて異なるテキスト値を取得します。 MsgBoxステートメントは、挨拶を表示します。Good Morning、Good Afternoon、またはGood Evening。
次のルーチンは、同じアクションを実行しますが、If-Then-End If構造体を使用します。
Sub GreetMe6()Time = 0.5の場合、Dim Msg As String 5およびTime = 0.75 Then Msg = "Evening" End If MsgBox "Good"&Msg End Sub
ElseIfを使用する
前の例では、ルーチン内のすべての文が実行されていました。わずかに効率的な構造は、条件が真であるとすぐにルーチンを終了します。たとえば、午前中は、Good Morningメッセージが表示され、終了する必要があります。他の余分な条件は評価されません。
このような小さなルーチンでは、実行速度を心配する必要はありません。しかし、速度が重要な大規模なアプリケーションでは、If-Then構造の別の構文について知っておく必要があります。
この構文を使用してGreetMeルーチンを書き換える方法は次のとおりです。
Sub GreetMe7()時間が0の場合、Dim Msg As String 5および時間<0. 75 then Msg = "午後" Else Msg = "Evening "End If MsgBox" Good "&Msg End Sub
条件が真であれば、VBAは条件文を実行し、If構造は終了します。言い換えれば、この手順は前の例よりも少し効率的です。トレードオフは、コードが理解しにくいことです。
別のIf-Thenの例
If-Then構造の単純な形式を使用する別の例を次に示します。このプロシージャは、ユーザーに数量を入力してから、ユーザーが入力した数量に基づいて適切な割引を表示します。
Sub ShowDiscount()Dim Quantity As Long Quant Discount As Double Quantity = InputBox( "Quantity:")Quantity > 0 Then Discount = 0 1 Quantity> = 25ならばDiscount = 0.15 Quantity> = 50ならばDiscount = 0. 2 Quantity> = 75ならばDiscount = 0. 25 MsgBox "Discount:"&Discount End Sub
このルーチンの各If-Thenステートメントが実行され、ステートメントが実行されるとDiscountの値が変更されることに注意してください。ただし、If-Thenステートメントは割引値の昇順になっているため、最終的に割引の正しい値が表示されます。
次の手順は、代替のElseIf構文を使用して同じタスクを実行します。この場合、ルーチンは真の条件の文を実行した直後に終了します。
Sub ShowDiscount2()Dim Quantity As Long Quant Discount As Double Quantity = InputBox( "Quantity:")Quantity> 0 and Quantity <25割引= 0。1 ElseIf Quantity> = 25そしてQuantity <50 then Discount = 0 15 ElseIf Quantity> = 50そしてQuantity <75 then Discount = 0.2 2 ElseIf Quantity> = 75 Then Discount = 0. 25 End If MsgBox "Discount:"& Discount End Sub
これらの複数のIf-Then構造はかなり面倒です。単純なバイナリの決定にのみIf-Then構造を使用することができます。