수색…
사례 선택
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