ブロックステートメントの If...Then...Else は、式の値に基づいてどちらか一方のグループのステートメントを実行するよう指定します。If...Then...Else ステートメントは 1 行に記述する必要があるので、それぞれのステートメントグループは通常は 1 つの短いステートメントです。
構文は次のとおりです。
If condition Then statements Else statements
この形式では、Then 節が実行されるか (condition が TRUE の場合)、Else 節が実行されます (condition が FALSE の場合)。 以下に例を示します。
If doCount% >= 1000 Then flagForm% = -1 Else flagForm% = 0
If condition Then statements
この形式では、condition が TRUE の場合に Then 節が実行されますが、それ以外の場合は何も実行されません。以下に例を示します。
If doCount% >= 1000 Then flagForm% = -1
どちらの形式も、次の行のステートメントから実行が継続されます。新規行が If...Then...Else ステートメントの終了として認識されるので、If...Then...Else ステートメントに続けて同一行に他のステートメントを記述することはできません。
次の例は、Exit Do という単一ステートメントで構成される Then 節を示しています。Else 節はありません。スクリプトは単純な Do ループを 1000 回実行してその経過時間を計算します。時間はクライアントによって異なります。
Dim doCount As Integer, startTime As Single
startTime! = Timer()
doCount% = 0
Do
' Increment doCount% through 1000 iterations of the Do loop.
doCount% = doCount% + 1
If doCount% > 1000 Then Exit Do
Loop
' Come here upon exit from the Do loop.
Print Timer() - startTime! "seconds for 1000 iterations"
' Output:
' .109375 seconds for 1000 iterations
Do と Exit ステートメントの詳細については、この章のそれぞれのステートメントの項を参照してください。
Then 節に複数のステートメントを含めるには、ステートメントをステートメント区切り文字のコロン (:) で区切ります。
Do
If doCount% >= 1000 Then Print "Done." : Exit Do
Loop
この例の Do ループ内の 2 つのステートメントを、次のように 1 つの If...Then...Else ステートメントに書き換えることもできます。
Do
If doCount% >= 1000 Then Exit Do Else doCount% = _
doCount% + 1
Loop
これは、前の例のループよりもコンパクトですが、前の例より実行に時間がかかります。
If...Then...Else ステートメントの条件は、前の例のように簡単にも、複雑にもできます。
次の例は、より複雑な条件を示しています。
If Abs(tempProx! - approx!) >= .00001 And iters% < 40 _
Then Exit Do
ステートメントは、If condition Then 形式または If condition Then statements Else 形式の後ろに同一行にソースコードが続く場合、If...Then...Else ステートメントとして識別されます。この言語が同一行にない限り、ステートメントは If...Then...ElseIf ステートメントとして解釈されます。
最終行を除く各行の最後に行継続文字のアンダースコア (_) を付けることにより、ステートメントを複数行に拡張できます。ただし、ステートメントが 2 行に渡るほど長くなれば、If...Then...ElseIf ステートメントとして書き換えたほうが読みやすくなります。