|
Microsoft® Visual Basic® Scripting Edition VBScript のフロー制御プログラム |
| 目次 | | 前ページ | 次ページ |
|
条件判断やループを制御するステートメント (制御構造) を使うと、実行を判断したり、繰り返しを行う Microsoft Visual Basic Scripting Edition (以下 VBScript) のコードを記述できます。
If...Then...Else ステートメントは、条件が真 (True) か偽 (False) を評価して、その結果に応じて実行するステートメントを指定するときに使います。通常、条件は値や変数を比較するための比較演算子が使われる式になります。比較演算子については、比較演算子を参照してください。If...Then...Else ステートメントは、必要なだけ何レベルでもネストできます。
条件が真の場合のステートメントの実行
条件が真 (True) で 1 つのステートメントだけを実行したい場合は、If...Then...Else ステートメントの 1 行の構文を使用してください。次に 1 行の構文の例を示します。この例では、Else キーワードを省略していることに気を付けてください。
複数行のコードを実行したい場合は、複数行の構文を使用してください。この構文には、次の例で示すように End If ステートメントが含まれます。Sub FixDate() Dim myDate myDate = #2/13/95# If myDate < Now Then myDate = Now End Sub
Sub AlertUser(value) If value = 0 Then AlertLabel.ForeColor = vbRed AlertLabel.Font.Bold = True AlertLabel.Font.Italic = True End If End Sub条件が真の場合と偽の場合とで、異なるステートメントを実行する
条件に応じて、実行可能な 2 つのブロックのステートメントを定義する場合には、If...Then...Else ステートメントを使います。条件が真 (True) の場合には、あるブロックが実行され、偽 (False) の場合には、別のブロックが実行されます。
Sub AlertUser(value) If value = 0 Then AlertLabel.ForeColor = vbRed AlertLabel.Font.Bold = True AlertLabel.Font.Italic = True Else AlertLabel.Forecolor = vbBlack AlertLabel.Font.Bold = False AlertLabel.Font.Italic = False End If End Sub
ループを使うと、ステートメントのブロックを繰り返し実行できます。条件が真 (True) になるまで、または条件が偽 (False) になるまで、ステートメントを繰り返し実行させることができます。指定した回数分ステートメントを繰り返すループもあります。VBScript では、次に示すループ ステートメントを使用できます。
- Do...Loop 条件が真 (True) の間、または真 (True) になるまでステートメントを繰り返します。
- While...Wend 条件が真 (True) の間ステートメントを繰り返します。
- For...Next カウンタを使って指定した回数分ステートメントを実行します。
Do...Loop ステートメントは、ステートメント ブロックの実行回数があらかじめわからない場合に使います。条件が真 (True) の間、または真 (True) になるまでステートメントを繰り返します。
条件が真の間、ステートメントを繰り返す
Do...Loop ステートメントの中で条件を判定するには、While キーワードを使います。次に示す最初の例のようにループに入る前に条件を判定したり、2 つ目の例のように少なくとも 1 回はループ処理を実行した後で条件を判定させることができます。ChkFirstWhile プロシージャの変数 myNum の値を 20 から 9 に変えると、ループ内部のステートメントは 1 回も実行されません。ChkLastWhile プロシージャの中で、条件が既に偽 (False) の場合は、ループ内部のステートメントを 1 回だけ実行します。
Sub ChkFirstWhile() Dim counter, myNum counter = 0 myNum = 20 Do While myNum > 10 myNum = myNum - 1 counter = counter + 1 Loop MsgBox "The loop made " & counter & " 回ループしました。" End Sub Sub ChkLastWhile() Dim counter, myNum counter = 0 myNum = 9 Do myNum = myNum - 1 counter = counter + 1 Loop While myNum > 10 MsgBox "The loop made " & counter & " 回ループしました。" End Sub
Do...Loop ステートメントの中で条件を判定するには、While キーワードを使って 2 つの方法で行います。次に示す最初の例のようにループに入る前に条件を判定したり、2 つ目の例のように少なくとも 1 回はループを実行した後で条件を判定させることができます。条件が偽 (False) である限り、ループが発生します。
Sub ChkFirstUntil()
Dim counter, myNum
counter = 0
myNum = 20
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox "The loop made " & counter & " 回ループしました。"
End Sub
Sub ChkLastUntil()
Dim counter, myNum
counter = 0
myNum = 1
Do
myNum = myNum + 1
counter = counter + 1
Loop Until myNum = 10
MsgBox "The loop made " & counter & " 回ループしました。"
End Sub
Do...Loop ステートメントを終了するには、Exit Do ステートメントを使います。無限ループを避けるためなど、ある条件でのみ処理を終了したい場合には、If...Then...Else ステートメントの 真 (True) のステートメント ブロックの中で Exit Do ステートメントを使います。条件が偽 (False) の場合は、通常どおりループを実行します。次の例では、変数 myNum に無限ループを発生させる値を割り当てています。そして If...Then...Else ステートメントで条件を判定して、無限の繰り返しを避けています。
Sub ExitExample()
Dim counter, myNum
counter = 0
myNum = 9
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
If myNum < 10 Then Exit Do
Loop
MsgBox "The loop made " & counter & " 回ループしました。"
End Sub
While...Wend ステートメントは、この用法に精通している方に対して VBScript が用意したものです。ただし、While...Wend ステートメントの中の処理は、柔軟性に欠けるため、Do...Loop ステートメントを使うことをお勧めします。
For...Next ステートメントは、指定した回数分のステートメント ブロックを実行するときに使います。このループでは、繰り返したループに応じて値が増減するカウンタ変数が使われます。たとえば、次に示すプロシージャでは、MyProc が 50 回実行されると、別のプロシージャが呼び出されます。For ステートメントには、カウンタ変数 x とその初期値および終了値を指定しています。Next ステートメントは、カウンタ変数を 1 ずつ増加させます。
Step キーワードを使うと、指定した値でカウンタ変数を増減できます。次の例では、カウンタ変数 j はループを繰り返すごとに 2 ずつ値を増加します。ループを終了したときには、合計が 2、4、6、8、10 を加算した値になります。Sub DoMyProc50Times() Dim x For x = 1 To 50 MyProc Next End Sub
カウンタ変数を減少させるには、Step キーワードに負の値を使います。その場合は、初期値より小さい値を終了値に指定する必要があります。次の例では、カウンタ変数 myNum はループを繰り返すごとに 2 ずつ減少します。ループを終了するときには、合計が 16、14、12、10、8、6、4、2 を加算した値になります。Sub TwosTotal() Dim j, total For j = 2 To 10 Step 2 total = total + j Next MsgBox "合計は " & total " です。" End Sub
Exit For ステートメントを使えば、カウンタが終了値に達する前に For...Next ステートメントを終了させることができます。エラーが発生したときなどのようにある条件でのみループを終了させたい場合は、If...Then...Else ステートメントの真 (True) のステートメント ブロックの中で Exit For ステートメントを使ってください。条件が偽 (False) の場合は、通常どおりループが実行されます。Sub NewTotal() Dim myNum, total For myNum = 16 To 2 Step -2 total = total + myNum Next MsgBox "合計は " & total " です。" End Sub