반복문 - Heeyoung-Ahn/Excel_VBA GitHub Wiki

For Next 문

  • 어떤 구문을 주어진 횟수만큼 반복하여 실행할 때 사용
  • 문법
For 변수명 = 초기값 to 종료값 (Step 증감값)
    반복 실행할 구문
    (Exit For)
Next 변수명
  • Sample
Sub ForNextDemo()
    Dim i As Long
    Dim lngEven As Long
    
    lngEven = 0
    For i = 2 To 20 Step 2
        lngEven = lngEven + i
    Next i
    MsgBox "2부터 20까지의 숫자 중 짝수의 합계는 " & lngEven & "입니다."
End Sub

For Each Next 문

  • 배열이나 컬렉션의 각 요소들에 대해 구문을 반복하여 실행할 때 사용
  • 문법
For Each 개체변수명 In 컬렉션 또는 배열
    반복 실행할 구문
    (Exit For)
Next 개체변수명
  • Sample1
Sub ForEachNextDemo1()
    Dim lngSum As Long
    Dim rng As Range
    Dim rngDB As Range
    
    Set rngDB = Range("A1:A10")
    lngSum = 0
    For Each rng In rngDB
        If rng.Value > 0 Then
            lngSum = lngSum + rng.Value
        End If
    Next rng
    Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = lngSum
End Sub
  • Sample2
Sub ForEachNextDemo2()
    Dim sht As Worksheet
    
    For Each sht In Worksheets
        If UCase(sht.Name) = UCase("sheet2") Then
            MsgBox "해당 시트가 존재합니다."
            Exit Sub
        End If
    Next sht
     MsgBox "해당 시트가 존재하지 않습니다."
End Sub

Do Loop 문

  • 조건을 만족할 때까지 반복해서 실행
  • 조건은 True or False 값을 반환하도록 작성
  • 문법
Do While(or Until) 조건
    반복 실행할 구문
    (Exit Do)
Loop
Do
    반복 실행할 구문
    (Exit Do)
Loop While(or Until) 조건

While: 조건이 ‘True’면 반복 / Until: 조건이 ‘True’가 될 때까지 반복

  • Sample
Sub DoUntilDemo()
    Dim rngDB As Range, rngA As Range
    Dim cntR As Integer, cntC As Integer, i As Integer
            
    '//영역설정
    Set rngDB = Sheets("DB").UsedRange
    cntR = rngDB.Rows.Count
    cntC = rngDB.Columns.Count
    
    '//사원명을 이름과 직책으로 분리
    Set rngA = rngDB.Resize(1).Find("사원명", lookat:=xlWhole)
    '[직책필드추가]
    rngA.Offset(0, 1).EntireColumn.Insert
    rngA.Offset(0, 1).Value = "직책"
    '[사원명, 직책 데이터 처리]
    i = 1
    Do
        rngA.Offset(i, 1).Value = Right(rngA.Offset(i).Value, Len(rngA.Offset(i)) - InStr(rngA.Offset(i).Value, " "))
        rngA.Offset(i).Value = Left(rngA.Offset(i).Value, InStr(rngA.Offset(i).Value, " ") - 1)
        i = i + 1
    Loop Until rngA.Offset(i) = vbNullString
End Sub