Microsoft® Visual Basic® Scripting Edition
코드에 의한 루프 처리
 VBScript 자습서
 이전 페이지다음 페이지


루프를 사용한 코드 반복 실행
루프를 사용하면 일단의 명령문들을 반복하여 실행할 수 있습니다. 루프에 따라서 조건문이 False가 될 때까지 또는 True가 될 때까지 명령문을 반복하여 실행합니다. 또 명령문을 특정 횟수만큼 반복하여 실행하는 루프도 있습니다.

VBScript에서 사용할 수 있는 루프문은 아래와 같습니다.

Do Loop문 사용
Do...Loop문을 사용하면 한 블록의 명령문을 무한하게 실행할 수 있습니다. 조건문이 True인 동안 또는 True가 될 때까지 명령문을 반복합니다.
조건문이 True인 동안 명령문을 반복 실행
While 키워드를 사용하여 Do...Loop문의 조건을 검사합니다. 아래 ChkFirstWhile 용례처럼 루프로 들어 가기 전에 또는 ChkLastWhile 용례처럼 루프를 적어도 한 번 실행한 후에 조건을 검사할 수 있습니다. ChkFirstWhile 프로시저에서는 myNum을 20 대신에 9로 지정하면 루프 안에 있는 명령문은 결코 실행되지 않지만, ChkLastWhile 프로시저에서는 해당 조건이 이미 False이므로 루프 안에 있는 명령문이 한 번만 실행됩니다.
 Sub ChkFirstWhile()
     Dim counter, myNum
     counter = 0
     myNum = 20
     Do While myNum > 10
         myNum = myNum - 1
         counter = counter + 1
     Loop
     MsgBox "루프를 " & counter & "번 반복하였습니다."
 End Sub

 Sub ChkLastWhile()
     Dim counter, myNum
     counter = 0
     myNum = 9
     Do
         myNum = myNum - 1
         counter = counter + 1
     Loop While myNum > 10
     MsgBox "루프를 " & counter & "번 반복하였습니다."
 End Sub
조건이 True가 될 때까지 명령문을 반복 실행
두 가지 방식으로 Until 키워드를 사용하여 Do...Loop문의 조건을 검사합니다. 아래 ChkFirstUntil 용례처럼 루프로 들어 가기 전에 또는 ChkLastUntil 용례처럼 루프를 적어도 한 번 실행한 다음 조건을 검사할 수 있습니다. 조건이 False인 동안 반복 실행됩니다.
 Sub ChkFirstUntil()
     Dim counter, myNum
     counter = 0
     myNum = 20
     Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
     Loop
     MsgBox "루프를 " & counter & "번 반복하였습니다."
 End Sub

 Sub ChkLastUntil()
     Dim counter, myNum
     counter = 0
     myNum = 1
     Do
         myNum = myNum + 1
         counter = counter + 1
     Loop Until myNum = 10
     MsgBox "루프를 " & counter & "번 반복하였습니다."
 End Sub
루프 안에서 Do...Loop문 끝내기
Exit Do문을 사용하여 Do...Loop문을 빠져 나갈 수 있습니다. 무한 루프를 피하는 것처럼 대개 어떤 상황에서만 빠져 나가려고 하므로 Exit Do문은 If...Then...Else문의 True 블록문에서 사용해야 합니다. 조건문이 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 "루프는 " & counter & "번 반복하였습니다."
 End Sub
While...Wend문 사용
VBScript에서는 그 사용에 익숙한 사용자를 위해 While...Wend문을 제공하고 있습니다. 그러나 While...Wend문은 유연성이 부족하므로 그 대신 Do...Loop문을 사용하는 것이 좋습니다.
For...Next문 사용
For...Next문을 사용하면 특정 횟수만큼 한 블록의 명령문을 실행할 수 있습니다. For 루프는 루프를 반복할 때마다 그 값이 증감하는 카운터 변수를 사용합니다.

예를 들어, 아래 프로시저는 MyProc 프로시저를 50회 반복하도록 합니다. For문에서 카운터 변수 x와 그 시작과 끝 값을 지정합니다. Next문에서는 카운터 변수의 값을 하나씩 증가시킵니다.

 Sub DoMyProc50Times()
     Dim x
     For x = 1 To 50
         MyProc
     Next
 End Sub
Step 키워드를 사용하면 카운터 변수 값을 지정한 값만큼씩 증감시킬 수 있습니다. 아래 용례에서 루프를 한 번씩 반복할 때마다 카운터 변수 j는 2만큼씩 증가합니다. 루프를 마쳤을 때 total의 값은 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만큼씩 감소합니다. 루프를 마쳤을 때 total의 값은 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문을 빠져 나갈 수 있습니다. 대개 오류가 발생하는 것처럼 어떤 특정 상황에서 루프를 빠져 나가려고 하므로 Exit For문은 If...Then...Else문의 True 블록문에서 사용해야 합니다. 조건문이 False인 동안에는 루프를 변함없이 실행합니다.

For Each...Next문 사용
For Each...Next 루프는 For...Next 루프와 비슷합니다. 지정한 횟수만큼 명령문을 반복 실행하는 대신 For Each...Next 루프는 컬렉션의 각 항목이나 배열의 각 요소에 따라서 명령문을 반복하여 실행합니다. 컬렉션의 요소 개수를 알 수 없는 경우에 특히 유용합니다.

아래 HTML 코드 용례에서는 Dictionary 개체의 내용이 여러 개의 입력란의 텍스트를 채우는 데 사용됩니다.

 <HTML>
 <HEAD><TITLE>폼과 요소</TITLE></HEAD>
 <SCRIPT LANGUAGE="VBScript">
 <!--
 Sub cmdChange_OnClick
    Dim d                   '변수를 작성합니다.
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "0", "Athens"     '키와 항목을 추가합니다.
    d.Add "1", "Belgrade"
    d.Add "2", "Cairo"

    For Each I in d
        Document.frmForm.Elements(I).Value = D.Item(I)
    Next
 End Sub
 -->
 </SCRIPT>
 <BODY>
 <CENTER>
 <FORM NAME="frmForm"

 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Button" NAME="cmdChange" VALUE="여기를 클릭하십시오."><p>
 </FORM>
 </CENTER>
 </BODY>
 </HTML>