이 기사에서는 VBA에서 사용되는 여러 종류의 루프와이를 사용하여 동일한 작업을 다른 방식으로 수행하는 방법에 대해 설명했습니다.

왜 루프인가?

루핑은 여러 프로그래밍 언어에서 사용되는 가장 강력한 프로그래밍 기술 중 하나입니다. 루핑은 필요한 횟수만큼 또는 주어진 조건이 참으로 평가되거나 특정 값에 도달 할 때까지 코드 블록을 반복하는 데 사용되며 그 후 다음 코드 블록이 실행됩니다.

Excel VBA 루프의 목적은 Excel에서 특정 횟수만큼 코드를 반복하도록하는 것입니다. 코드가 고정 된 숫자 (예 : 10 회) 또는 변수 (예 : 데이터 행 수만큼 반복)로 반복되어야하는 횟수를 지정할 수 있습니다.

Excel 루프는 다양한 상황에 맞게 다양한 방식으로 구성 할 수 있습니다. 종종 동일한 결과를 개인 취향에 맞게 다른 방법으로 얻을 수 있습니다.

Excel VBA에서 사용할 수있는 세 가지 종류의 루프가 있습니다.

  1. DO UNTIL 루프 2. DO WHILE 루프 3. FOR 루프 {비어 있음} 1. DO UNTIL 루프 DO UNTIL 루프는 지정된 조건이 True로 설정 될 때까지 코드 블록을 무기한 반복하는 데 사용됩니다. 조건은 루프의 시작 또는 끝에서 확인할 수 있습니다. DO UNTIL… LOOP 문은 처음에 조건을 테스트하는 반면 DO… LOOP UNTIL 문은 루프 끝에서 조건을 테스트합니다.

DO UNTIL… LOOP 문의 구문

[조건]까지 수행

[반복 할 코드 블록]

루프

DO… LOOP UNTIL 문의 구문

Do [반복 할 코드 블록]

[조건]까지 반복

DO… UNTIL 루프를 예제로 설명했습니다. Loop1 및 Loop2 매크로는 DO… UNTIL 루프를 사용하여 A 열과 B 열의 숫자 평균을 계산하는 데 사용됩니다.

샘플 데이터는 A15 : B27 범위에 있습니다. A 열에는 1 라운드의 점수가 포함되고 B 열에는 2 라운드의 점수가 포함되어 있습니다. C 열의 1 라운드와 2 라운드의 점수 평균을 계산하려고합니다.

Sample1

Loop1 매크로에서는“FormulaR1C1”을 사용하여 활성 셀에 평균 수식을 삽입했습니다. DO UNTIL 루프의 조건문은 루프 끝에서 확인됩니다.

Loop2 매크로에서는“WorksheetFunction.Average”를 사용하여 활성 셀에 평균값을 삽입했습니다. 이 매크로에서도 루프의 끝에서 조건문을 확인합니다.

Loop1과 Loop2 매크로의 유일한 차이점은 Loop1은 평균 공식을 삽입하는 반면 Loop2는 평균을 계산 한 다음 활성 셀에 평균 값을 삽입한다는 것입니다.

OutputSample1

{비어 있음} 2. DO WHILE 루프 DO WHILE 루프는 코드 블록을 무제한 반복하는 데 사용되는 반면 지정된 조건은 계속 True이고 조건이 False를 반환하면 중지됩니다. 조건은 루프의 시작 또는 끝에서 확인할 수 있습니다. DO WHILE… LOOP 문은 처음에 조건을 테스트하는 반면 DO… LOOP WHILE 문은 루프 끝에서 조건을 테스트합니다. DO… LOOP WHILE 문은 조건을 확인하기 전에 루프가 코드 블록을 적어도 한 번 실행하기를 원할 때 사용됩니다.

DO WHILE… LOOP 문의 구문

[조건] 동안 수행

[반복 할 코드 블록]

루프

DO… LOOP WHILE 문의 구문

Do [반복 할 코드 블록]

[조건] 동안 루프

이 예에서 Loop3 및 Loop4 매크로는 A 열과 B 열의 셀 값에 대한 평균을 계산하는 데 사용됩니다. 두 매크로 모두 Loop1 및 Loop2 매크로에서 사용하는 것과 동일한 샘플 데이터에서 작동합니다. 둘 다 DO WHILE 문을 사용하여 데이터가 포함 된 범위를 반복합니다.

Loop3 매크로와 Loop4 매크로의 유일한 차이점은 DO WHILE 루프의 조건을 나타내는 다른 방법이라는 것입니다.

Loop3 및 Loop4 매크로는 동일한 입력 데이터를 사용하고 Loop1 매크로와 동일한 기능을 수행하므로 반환 된 출력도 Loop1 매크로와 동일합니다.

{비어 있음} 3. FOR 루프 For 루프는 특정 횟수만큼 코드 블록을 반복하는 데 사용됩니다.

FOR 루프 구문

count_variable = start_value end_value [코드 블록]

다음 count_variable Loop5 매크로는 FOR 루프를 사용하여 평균을 계산하는 방법을 보여줍니다. 또한 다른 매크로에서 사용하는 동일한 샘플 데이터를 사용합니다. 샘플 데이터가 15 ^ th ^ 행에서 시작하므로 15를 시작 값으로 사용했습니다. 데이터를 포함하는 마지막 행을 찾기 위해 Range ( “A”& Cells.Rows.Count) .End (xlUp) .Row를 사용했습니다. FOR 루프는 (lastcell-15) 횟수 반복됩니다.

Loop5 매크로 실행 후 반환되는 출력은 Loop1 매크로와 동일합니다.

Loop6 매크로는 매크로를 실행하기 전에 평균 기능을 가질 활성 셀이 비어있는 경우에만 평균을 계산하기 위해 생성됩니다.

이 매크로의 샘플 데이터는 E15 ~ G27 범위에 있습니다.

Sample2

DO… LOOP WHILE을 사용하여 정의 된 범위를 반복했습니다. IF 문은 함수가 삽입 될 셀에 값이 있는지 확인하는 데 사용됩니다. 이 매크로는 비어있는 경우에만 평균 함수를 셀에 삽입합니다.

OutputSample2

Loop7 매크로는 평균을 계산하는데도 사용됩니다. 다시 반복할지 여부를 평가하기 전에 도우미 열의 값을 확인합니다. 또한 평균 함수에서 사용할 셀 참조가 비어 있는지 확인합니다.

Loop7 매크로에 사용되는 샘플 데이터는 J15 : M27 범위에 있습니다.

Sample3

M 열은 도우미 열로 사용됩니다. 이 매크로는 M 열의 셀이 비어 있지 않은 경우에만 평균 함수를 삽입합니다. 이 매크로는 평균 함수를 삽입하기 전에 셀이 비어 있는지 확인합니다. 평균 함수에서 참조하는 셀이 비어 있으면 평균 함수를 삽입하지 않습니다.

OutputSample3

아래 코드를 따르세요

Option Explicit

Sub Loop1()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

Range("C15").Select

Do

'Assigning average function on value in cells of previous two consecutive columns

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

'Moving to cell in next row

ActiveCell.Offset(1, 0).Select

'Checking whether value in cell of previous column is empty

'Do Until loop will loop until condition statement returns True

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("A15").Select

End Sub

Sub Loop2()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

'This macro is similar to macro Loop1, only way of calculating average is different

Range("C15").Select

Do

'Worsheet.Average function is used for calculating the average

ActiveCell.Value = WorksheetFunction.Average(ActiveCell.Offset(0, -1).Value, _

ActiveCell.Offset(0, -2).Value)

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("A15").Select

End Sub

Sub Loop3()

'Calculating average

'Do While loop will run until cell in the previous column of active cell is empty

Range("C15").Select

'Checking whether value in cell of previous column is empty

'Do While loop will loop until condition statement is True

Do While IsEmpty(ActiveCell.Offset(0, -1)) = False

'Assigning average function on value in cells of previous two consecutive column

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

'Moving to cell in next row

ActiveCell.Offset(1, 0).Select

Loop

Range("A15").Select

End Sub

Sub Loop4()

'Calculating average

'Do While loop will run until cell in the previous column of active cell is empty

'This macro is similar to macro Loop3, only way of applying condition is different

Range("C15").Select

Do While Not IsEmpty(ActiveCell.Offset(0, -1))

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

ActiveCell.Offset(1, 0).Select

Loop

Range("A15").Select

End Sub

Sub Loop5()

'FOR loop repeats for a fixed number of times determined by the number of rows

Dim i, lastcell As Long

'Finding the last row containing data in column A

lastcell = Range("A" & Cells.Rows.Count).End(xlUp).Row

Range("C15").Select

'i variable is assigned value of 15 as our sample data begin from 15th row

'FOR Loop will loop x

For i = 15 To lastcell

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

ActiveCell.Offset(1, 0).Select

Next i

Range("A15").Select

End Sub

Sub Loop6()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

'It does not calculate an average if there is already something in the cell

Range("G15").Select

Do

If IsEmpty(ActiveCell) Then

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

End If

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("E15").Select

End Sub

Sub Loop7()

'Do Until loop runs as long as there is something in cell in next column

'It does not calculate an average if there is already something in the active cell

'Nor if there is no data in cells which are used within average function (to avoid #DIV/0 errors).

'Calculating average

Range("L15").Select

Do

If IsEmpty(ActiveCell) Then

If IsEmpty(ActiveCell.Offset(0, -1)) And IsEmpty(ActiveCell.Offset(0, -2)) Then

ActiveCell.Value = ""

Else

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

End If

End If

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell.Offset(0, 1))

Range("J15").Select

End Sub

이 블로그가 마음에 들면 Facebook 및 Facebook에서 친구들과 공유하십시오.

여러분의 의견을 듣고 싶습니다. 작업을 개선하고 더 나은 서비스를 제공 할 수있는 방법을 알려주십시오. [email protected]로 문의 해주세요