반복문 - 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