VBA의 루프

VBA 프로그램이 동일한 일련의 작업을 연속적으로 여러 번 수행해야 하는 상황이 있습니다(즉, 동일한 코드 블록을 여러 번 반복). 이것은 VBA 루프를 사용하여 수행할 수 있습니다.

VBA 루프에는 다음이 포함됩니다.

다음으로 이러한 각 주기를 자세히 살펴보겠습니다.

Visual Basic의 For 루프 연산자

루프 연산자의 구조 XNUMXD덴탈의 Visual Basic에서는 다음 두 가지 형식 중 하나로 구성할 수 있습니다. 다음을 위해… 또는 루프로 각각.

"다음을 위해" 주기

주기 다음을 위해… 주어진 범위에서 순차적으로 값을 취하는 변수를 사용합니다. 변수 값이 변경될 때마다 주기 본문에 포함된 작업이 수행됩니다. 이것은 간단한 예에서 이해하기 쉽습니다.

i의 경우 = 1에서 10까지 총계 = 총계 + iArray(i) 다음 i

이 간단한 루프에서 다음을 위해… 변수가 사용됨 i, 순차적으로 값 1, 2, 3, … 10을 취하고 이러한 각 값에 대해 루프 내부의 VBA 코드가 실행됩니다. 따라서 이 루프는 배열의 요소를 합산합니다. 아이어레이 변수에 금액.

위의 예에서는 루프 증가가 지정되지 않았으므로 변수를 증가시키려면 i 1에서 10까지, 기본값은 증분입니다. 1… 그러나 경우에 따라 루프에 대해 다른 증분 값을 사용해야 합니다. 이것은 키워드를 사용하여 수행할 수 있습니다. 단계다음과 같은 간단한 예에서 볼 수 있습니다.

d = 0에서 10까지 단계 0.1 dTotal = dTotal + d 다음 d

위의 예에서 증분 단계는 다음과 같이 설정됩니다. 0.1, 다음 변수 d합계 주기의 각 반복에 대해 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0 값을 취합니다.

VBA에서 루프 단계를 결정하려면 다음과 같이 음수 값을 사용할 수 있습니다.

For i = 10 To 1 Step -1 iArray(i) = i Next i

여기서 증분은 -1, 그래서 변수 i 주기가 반복될 때마다 10, 9, 8, … 1의 값을 취합니다.

루프 "For Each"

주기 각각 사이클과 유사 다음을 위해…, 그러나 카운터 변수에 대한 값 시퀀스를 반복하는 대신 루프 각각 지정된 개체 그룹의 각 개체에 대해 일련의 작업을 수행합니다. 다음 예에서는 루프를 사용하여 각각 현재 Excel 통합 문서의 모든 시트를 열거합니다.

Dim wSheet As Worksheet As Worksheets in Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

루프 인터럽트 문 "Exit For"

운영자 종료 주기를 중단하는 데 사용됩니다. 코드에서 이 문이 발견되자마자 프로그램은 루프의 실행을 종료하고 이 루프 바로 뒤에 있는 코드에 있는 명령문의 실행을 진행합니다. 예를 들어 배열에서 특정 값을 검색하는 데 사용할 수 있습니다. 이를 위해 루프를 사용하여 배열의 각 요소를 스캔합니다. 필요한 요소가 발견되는 즉시 나머지 요소를 살펴볼 필요가 없습니다. 주기가 중단됩니다.

운영자 신청 종료 다음 예에서 보여줍니다. 여기서 루프는 100개 이상의 배열 항목을 반복하고 각각을 변수 값과 비교합니다. dVal… 일치하는 항목이 발견되면 루프가 종료됩니다.

For i = 1 ~ 100 If dValues(i) = dVal Then IndexVal = i 다음 i인 경우 종료를 위해 종료

Visual Basic의 Do While 루프

주기 잠시만 지정된 조건이 충족되는 한 코드 블록을 실행합니다. 다음은 절차의 예입니다 서브, 루프를 사용하는 잠시만 1000을 초과하지 않는 피보나치 수는 순차적으로 표시됩니다.

'Sub 프로시저는 1000을 초과하지 않는 피보나치 수를 출력합니다. Sub Fibonacci() Dim i As Integer ' 시퀀스에서 요소의 위치를 ​​나타내는 카운터 Dim iFib As Integer ' 시퀀스의 현재 값을 저장합니다. Dim iFib_Next As Integer ' 다음 값을 저장합니다. Dim iStep As Integer '다음 증분 크기 저장' 변수 i 및 iFib_Next i = 1 iFib_Next = 0 '현재 피보나치 수의 값이 1000보다 클 때까지 Do While 루프가 실행됩니다. Do While iFib_Next < 1000 If i = 1 그러면 '첫 번째 요소에 대한 특별한 경우 iStep = 1 iFib = 0 Else ' 시퀀스의 현재 값을 덮어쓰기 전에 다음 증분의 크기를 저장합니다. iStep = iFib iFib = iFib_Next End If ' 열 A의 현재 피보나치 수를 인쇄합니다. 인덱스가 있는 행의 활성 워크시트 ' i Cells(i , 1).Value = iFib '다음 피보나치 수를 계산하고 요소 위치 인덱스를 1씩 증가 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

주어진 예에서 조건 iFib_Next < 1000 루프 시작 부분에서 확인했습니다. 따라서 첫 번째 값의 경우 iFib_다음 1000개 이상이면 루프가 실행되지 않습니다.

루프를 구현하는 또 다른 방법 잠시만 - 조건을 루프의 시작이 아닌 루프의 끝에 배치합니다. 이 경우 조건 충족 여부에 관계없이 루프가 한 번 이상 실행됩니다.

이러한 주기를 개략적으로 잠시만 마지막에 확인할 조건은 다음과 같습니다.

Do ... iFib_Next < 1000 동안 반복

Visual Basic의 «다음까지 수행»

주기 할 때까지 주기와 매우 유사 잠시만: 루프 본문에 있는 코드 블록은 지정된 조건이 충족될 때까지 반복해서 실행됩니다(조건식의 결과는 다음과 같습니다. 참된). 다음 절차에서 서브 사이클을 사용하여 할 때까지 열의 모든 셀에서 값 검색 A 열이 빈 셀을 만날 때까지 워크시트:

iRow = 1 Do until IsEmpty(Cells(iRow, 1)) '현재 셀의 값이 dCellValues ​​배열에 저장됩니다. dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

위의 예에서 조건 IsEmpty(셀(iRow, 1)) 구조의 시작 부분에 위치 할 때까지, 따라서 가져온 첫 번째 셀이 비어 있지 않으면 루프가 적어도 한 번 실행됩니다.

그러나 루프 예제에서 볼 수 있듯이 잠시만, 어떤 상황에서는 조건식의 초기 결과에 관계없이 루프를 한 번 이상 실행해야 합니다. 이 경우, 조건식은 다음과 같이 루프의 끝에 배치되어야 합니다.

Do ... IsEmpty(Cells(iRow, 1))까지 루프

댓글을 남겨주세요.