Microsoft® Visual Basic® Scripting Edition
VBScript のフロー制御プログラム
目次  |
前ページ  | 次ページ  |

 

プログラムの実行制御
条件判断やループを制御するステートメント (制御構造) を使うと、実行を判断したり、繰り返しを行う Microsoft Visual Basic Scripting Edition (以下 VBScript) のコードを記述できます。

If...Then...Else ステートメントを使って実行を判断する
If...Then...Else ステートメントは、条件が真 (True) か偽 (False) を評価して、その結果に応じて実行するステートメントを指定するときに使います。通常、条件は値や変数を比較するための比較演算子が使われる式になります。比較演算子については、比較演算子を参照してください。If...Then...Else ステートメントは、必要なだけ何レベルでもネストできます。

条件が真の場合のステートメントの実行
条件が真 (True) で 1 つのステートメントだけを実行したい場合は、If...Then...Else ステートメントの 1 行の構文を使用してください。次に 1 行の構文の例を示します。この例では、Else キーワードを省略していることに気を付けてください。


 Sub FixDate()
     Dim myDate
     myDate = #2/13/95#
     If myDate < Now Then myDate = Now
 End Sub

複数行のコードを実行したい場合は、複数行の構文を使用してください。この構文には、次の例で示すように End If ステートメントが含まれます。


 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 ステートメントを使う
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 ステートメントを終了する
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 ステートメントを使う
While...Wend ステートメントは、この用法に精通している方に対して VBScript が用意したものです。ただし、While...Wend ステートメントの中の処理は、柔軟性に欠けるため、Do...Loop ステートメントを使うことをお勧めします。
For...Next ステートメントを使う
For...Next ステートメントは、指定した回数分のステートメント ブロックを実行するときに使います。このループでは、繰り返したループに応じて値が増減するカウンタ変数が使われます。

たとえば、次に示すプロシージャでは、MyProc が 50 回実行されると、別のプロシージャが呼び出されます。For ステートメントには、カウンタ変数 x とその初期値および終了値を指定しています。Next ステートメントは、カウンタ変数を 1 ずつ増加させます。


 Sub DoMyProc50Times()
     Dim x
     For x = 1 To 50
         MyProc
     Next
 End Sub

Step キーワードを使うと、指定した値でカウンタ変数を増減できます。次の例では、カウンタ変数 j はループを繰り返すごとに 2 ずつ値を増加します。ループを終了したときには、合計が 2、4、6、8、10 を加算した値になります。


 Sub TwosTotal()
     Dim j, total
     For j = 2 To 10 Step 2
         total = total + j
     Next
     MsgBox "合計は " & total " です。"
 End Sub

カウンタ変数を減少させるには、Step キーワードに負の値を使います。その場合は、初期値より小さい値を終了値に指定する必要があります。次の例では、カウンタ変数 myNum はループを繰り返すごとに 2 ずつ減少します。ループを終了するときには、合計が 16、14、12、10、8、6、4、2 を加算した値になります。


 Sub NewTotal()
     Dim myNum, total
     For myNum = 16 To 2 Step -2
         total = total + myNum
     Next
     MsgBox "合計は " & total " です。"
 End Sub

Exit For ステートメントを使えば、カウンタが終了値に達する前に For...Next ステートメントを終了させることができます。エラーが発生したときなどのようにある条件でのみループを終了させたい場合は、If...Then...Else ステートメントの真 (True) のステートメント ブロックの中で Exit For ステートメントを使ってください。条件が偽 (False) の場合は、通常どおりループが実行されます。


© 1997 Microsoft Corporation.