수색…


사례 선택

Select Case 는 다양한 조건이 가능할 때 사용할 수 있습니다. 조건은 위에서 아래로 확인되며 일치하는 첫 번째 경우 만 실행됩니다.

Sub TestCase()
    Dim MyVar As String

    Select Case MyVar    'We Select the Variable MyVar to Work with
        Case "Hello"     'Now we simply check the cases we want to check
            MsgBox "This Case"
        Case "World"
            MsgBox "Important"
        Case "How"
            MsgBox "Stuff"
        Case "Are"
            MsgBox "I'm running out of ideas"
        Case "You?", "Today"  'You can separate several conditions with a comma
            MsgBox "Uuuhm..." 'if any is matched it will go into the case
        Case Else             'If none of the other cases is hit
            MsgBox "All of the other cases failed"
    End Select

    Dim i As Integer
    Select Case i
        Case Is > 2 '"Is" can be used instead of the variable in conditions.
            MsgBox "i is greater than 2"
        'Case 2 < Is '"Is" can only be used at the beginning of the condition.
        'Case Else is optional
    End Select
End Sub

Select Case 블록의 논리는 다른 변수의 테스트를 지원하기 위해 뒤집을 수 있습니다. 이런 종류의 시나리오에서는 논리 연산자도 사용할 수 있습니다.

Dim x As Integer
Dim y As Integer

x = 2
y = 5

Select Case True
    Case x > 3
        MsgBox "x is greater than 3"
    Case y < 2
        MsgBox "y is less than 2"
    Case x = 1
        MsgBox "x is equal to 1"
    Case x = 2 Xor y = 3
        MsgBox "Go read about ""Xor"""
    Case Not y = 5
        MsgBox "y is not 5"
    Case x = 3 Or x = 10
        MsgBox "x = 3 or 10"
    Case y < 10 And x < 10
        MsgBox "x and y are less than 10"
    Case Else
        MsgBox "No match found"
End Select

case 문은 산술 연산자를 사용할 수도 있습니다. Select Case 값에 대해 산술 연산자를 사용하는 경우 Is 키워드 Is 앞에 와야합니다.

Dim x As Integer

x = 5

Select Case x
    Case 1
        MsgBox "x equals 1"
    Case 2, 3, 4
        MsgBox "x is 2, 3 or 4"
    Case 7 To 10
        MsgBox "x is between 7 and 10 (inclusive)"
    Case Is < 2
        MsgBox "x is less than one"
    Case Is >= 7
        MsgBox "x is greater than or equal to 7"
    Case Else
        MsgBox "no match found"
End Select

각 루프의 경우

For Each 루프 구문은 컬렉션의 모든 요소를 ​​반복하는 데 이상적입니다.

Public Sub IterateCollection(ByVal items As Collection)

    'For Each iterator must always be variant
    Dim element As Variant

    For Each element In items
        'assumes element can be converted to a string
        Debug.Print element
    Next

End Sub

객체 컬렉션을 반복 할 때 For Each 사용하십시오.

Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
    Debug.Print sheet.Name
Next

배열을 반복 할 때 For Each 피하십시오. For 루프는 배열의 성능을 크게 향상시킵니다. 반대로 For Each 루프는 Collection 반복 할 때 더 나은 성능을 제공합니다.

통사론

For Each [item] In [collection]
    [statements]
Next [item]

Next 키워드는 선택적으로 iterator 변수가 올 수 있습니다. 내부 루프를 자체 프로 시저로 추출하는 것과 같이 중첩 된 코드를 명확히하는 더 나은 방법이 있지만 중첩 된 루프를 명확히하는 데 도움이 될 수 있습니다.

Dim book As Workbook
For Each book In Application.Workbooks

    Debug.Print book.FullName

    Dim sheet As Worksheet
    For Each sheet In ActiveWorkbook.Worksheets
        Debug.Print sheet.Name
    Next sheet
Next book

루프 수행

 Public Sub DoLoop()
    Dim entry As String
    entry = ""
    'Equivalent to a While loop will ask for strings until "Stop" in given
    'Prefer using a While loop instead of this form of Do loop
    Do While entry <> "Stop"
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop

    'Equivalent to the above loop, but the condition is only checked AFTER the
    'first iteration of the loop, so it will execute even at least once even 
    'if entry is equal to "Stop" before entering the loop (like in this case)
    Do
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop While entry <> "Stop"

    
    'Equivalent to writing Do While Not entry="Stop"
    '
    'Because the Until is at the top of the loop, it will
    'not execute because entry is still equal to "Stop"
    'when evaluating the condition
    Do Until entry = "Stop"
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop

    'Equivalent to writing Do ... Loop While Not i >= 100
    Do
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop Until entry = "Stop"
End Sub

While 루프

'Will return whether an element is present in the array
Public Function IsInArray(values() As String, ByVal whatToFind As String) As Boolean
    Dim i As Integer
    i = 0

    While i < UBound(values) And values(i) <> whatToFind
        i = i + 1
    Wend
    
    IsInArray = values(i) = whatToFind
End Function

For 루프

For 루프는 주어진 횟수만큼 닫힌 코드 섹션을 반복하는 데 사용됩니다. 다음의 간단한 예제는 기본 구문을 보여줍니다.

Dim i as Integer           'Declaration of i
For i = 1 to 10            'Declare how many times the loop shall be executed
    Debug.Print i          'The piece of code which is repeated
Next i                     'The end of the loop

위의 코드는 Integer i 선언합니다. For 루프는 1에서 10 사이의 모든 값을 i 할당 한 다음 Debug.Print i 를 실행합니다. 즉 코드는 직접 창에 1에서 10까지의 숫자를 인쇄합니다. 루프 변수는 Next 문에 의해 증가됩니다. 즉, 실행되기 전에 닫힌 코드가 실행 된 후입니다.

기본적으로 카운터는 루프가 실행될 때마다 1 씩 증가합니다. 그러나 Step 는 함수의 리터럴 또는 리턴 값 중 하나로 증가분의 양을 변경하도록 지정할 수 있습니다. 시작 값, 종료 값 또는 Step 값이 부동 소수점 수이면 가장 가까운 정수 값으로 반올림됩니다. Step 는 양수 또는 음수 값일 수 있습니다.

Dim i As Integer
For i = 1 To 10 Step 2
    Debug.Print i       'Prints 1, 3, 5, 7, and 9
Next

일반적으로 For 루프는 둘러싸인 코드를 실행하는 횟수를 루프가 시작하기 전에 알 수있는 상황에서 사용됩니다 (그렇지 않으면 Do 또는 While 루프가 더 적절할 수 있습니다). 이 코드는 다음과 같이 루프에 처음 진입 한 후 종료 조건이 고정되어 있기 때문에 발생합니다.

Private Iterations As Long              'Module scope

Public Sub Example()
    Dim i As Long
    Iterations = 10
    For i = 1 To Iterations
        Debug.Print Iterations     'Prints 10 through 1, descending.
        Iterations = Iterations - 1
    Next
End Sub

For 루프는 Exit For 문을 사용하여 일찍 종료 할 수 있습니다.

Dim i As Integer

For i = 1 To 10
    If i > 5 Then
        Exit For
    End If
    Debug.Print i       'Prints 1, 2, 3, 4, 5 before loop exits early.
Next


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow