• 최초 작성일: 2000-05-30
  • 최종 수정일: 2026-09-30
  • 조회수: 13 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 실행순서제어하기Ⅱ

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

특종! 무한대 하드디스크 개발!!!(←인터넷에서 퍼온 글)

국내의 한 벤처 기업이 용량이 무한대인 하드 디스크를 개발하는 쾌거를 이루었다고 합니다. 문자 그대로 무한대의 용량을 가진 하드 디스크라 컴퓨터 업계에 엄청난 파장을 일으킬 것으로 예상이 됩니다.

그런데 아직 실용화 단계에 이르지는 못하고 있으며 앞으로도 힘들 것이라고 합니다.

그 이유인 즉… 아직도 포맷 중이라고 합니다... ^^

지난 시간에 이어지는 내용… 실행순서 제어구문 중에서 GoTo, If ~ Then, Select Case文에 대해서는 설명을 드렸고, 나머지 2가지 에 대해 설명을 드립니다.

For ~ Next, Do While, Do Until, 이 세가지를 특별히 Loop block Instruction이라고 하기도 합니다. 특정한 조건을 만족하면 계속해서 프로그램을 실행하기 때문에 붙여진 이름이지요.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

실행순서제어하기Ⅱ

핵심 요약: 반복문 3가지

For ~ Next는 횟수가 정해진 반복, Do While은 조건이 참인 동안, Do Until은 조건이 참이 될 때까지 반복합니다.

  • For ~ Next: 시작값부터 끝값까지 Step만큼 증가하며 반복합니다.
  • Do ~ While: 조건식이 True인 동안 반복합니다.
  • Do ~ Until: 조건식이 True가 될 때까지 반복합니다.
  • 조건 위치: Do 뒤에 두면 한 번도 실행되지 않을 수 있고, Loop 뒤에 두면 적어도 한 번은 실행됩니다.

Step 1: For ~ Next 문

Loop block을 만드는 가장 간단한 방법이 For ~ Next 구문입니다. 몇 강좌 전에 설명을 드렸던 For Each ~ Next 문이 바로 For ~ Next의 한 형태입니다.

For counter = 시작 To 끝 [Step 값]
    … 어쩌고 …
    … 저쩌고 …
Next [counter]

위에 예시한 것이 For ~ Next 문의 가장 일반적인 형태라고 할 수 있습니다.

Sub ForNextDemo()
    Dim intSum As Double     '제곱근의 합을 저장할 변수 선언
    Dim intCount As Integer  '반복회수를 지정할 변수 선언

    For intCount = 1 To 100
        intSum = intSum + Sqr(intCount)
    Next intCount

    MsgBox "1부터 100까지의 제곱근의 합계는 " & intSum & " 입니다.", , "//Exceller"
End Sub

먼저 변수를 선언해 주었지요. 항상 변수를 선언하고 쓰는 버릇을 들이도록 하세요.

For ~ Next 구문이 나왔네요. intCount가 1부터 100까지 즉 1, 2, 3,… 100까지 돌면서 각 숫자의 제곱근 값을 intSum이라는 실수형(Double) 변수에 차곡차곡 담아두지요. For intCount = 1 To 100 다음에 Step 부분을 생략하면 디폴트값으로 1이 지정이 됩니다. 만약 홀수에 해당되는 숫자들의 제곱근의 합을 구하려면 For intCount = 1 To 100 Step 2라고 해주면 되겠지요?

순환이 모두 끝났으면 100번을 순환하면서 intSum 변수에 그동안 담아둔 제곱근 값의 합계를 화면에 뿌려줍니다.

조금 응용을 해 볼까요? 즉 위의 경우에는 시작되는 값과 끝나는 값이 고정이 되어 있었는데(1~100) 시작값과 끝나는 값을 사용자가 마음대로 변경을 할 수 있도록 해보는 것입니다. 아래의 버튼을 눌러 보세요.

Sub ForNextDemo2()
    Dim lngStart As Long
    Dim lngEnd As Long
    Dim dblSum As Double
    Dim lngCount As Long

    lngStart = InputBox("시작할 숫자는?", "//Exceller")
    lngEnd = InputBox("끝나는 숫자는?", "//Exceller")
    If lngStart >= lngEnd Then
        MsgBox "시작할 숫자가 끝나는 숫자보다 크면 안됩니다!!!", , "//Exceller"
        Exit Sub
    End If

    For lngCount = lngStart To lngEnd
        dblSum = dblSum + Sqr(lngCount)
    Next lngCount
    MsgBox lngStart & " 에서 " & lngEnd & " 까지의 제곱근의 합계는 " & _
        dblSum & " 입니다.", , "//Exceller"
End Sub

사용자가 마음대로 값을 변경해 가며 테스트를 해볼 수가 있겠지요? 응용력을 발휘하면 아주 재미있는 것을 만들수 있을 것 같지 않습니까? 한번 연습해 보시기 바랍니다.

Step 2: Do ~ While 문

Loop block을 만드는 또한가지 방법은 Do ~ While 문을 사용하는 것입니다. 이것은 특정한 조건을 만족하는 동안에는 계속해서 특정 명령을 수행하는 것으로 Do ~ While문은 아래의 두가지 형태를 가집니다.

Do [While 조건]
    … 어쩌고 …
    … 저쩌고 …
    Exit Do
    … 어쩌고 저쩌고 …
Loop
Do
    … 어쩌고 …
    … 저쩌고 …
    Exit Do
    … 어쩌고 저쩌고 …
Loop [While 조건]

이 두가지 형태의 차이점은 다음의 예제를 보시면 명확해 집니다.

Sub DoWhileDemo()
    Do While Not IsEmpty(ActiveCell)
        ActiveCell.Value = 0
        ActiveCell.Offset(1, 0).Select
    Loop
End Sub

이 프로시저는 현재 셀포인터가 위치해 있는 셀을 시작으로 해서 아래로 한간씩 내려가면서 0(zero)을 셀에 삽입합니다. 그리고 루프문을 한바퀴씩 돌 때 마다 그 다음의 셀을 ActiveCell로 설정을 해 주고 있습니다. 따라서 경우에 따라서 이 프로시저는 Do ~ Loop 내의 실행문을 한번도 실행하지 않을 수도 있겠지요? 즉, 맨 처음 셀부터 아무 값도 입력된 것이 없다면 아예 한번도 실행되지가 않을수 있습니다.

왜냐구요? Do문 안으로 들어가기 전에 조건 비교를 미리 해서 ActiveCell이 공란이면 Do ~ Loop 안으로 들여보내지를 않기 때문이지요.

그런데 아래의 경우에는 어떤가요?

Sub DoWhileDemo2()
    Do
        ActiveCell.Value = 0
        ActiveCell.Offset(1, 0).Select
    Loop While Not IsEmpty(ActiveCell)
End Sub

이번에는 While이 Loop 다음에 있습니다. 이 때에는 Do ~ Loop 사이에 있는 실행문을 적어도 한번은 실행을 하게 되지요.

결국, 이 두가지 형식의 차이점은 어느 시점에서 Loop문을 종료하느냐의 차이인 것입니다. 그렇지만 실제 결과를 놓고보면 같게 되지요.(적어도 위의 경우에는…)

참고: 위 예제는 셀을 하나씩 Select하며 내려가므로 데이터가 많으면 느립니다. 실무에서는 ActiveCell과 Select 대신 Cells(행, 열)이나 Offset으로 셀을 직접 참조하는 방식이 더 빠르고 안정적입니다. 또한 예제는 빈 셀을 만날 때까지 값을 0으로 덮어쓰므로, 실제 데이터가 있는 시트에서는 실행 위치에 주의하시기 바랍니다.

Step 3: Do ~ Until 문

Do ~ Until 루프문은 Do ~ While 문과 흡사합니다. 차이점은 Do While 문은 조건식이 True인 동안에는 명령을 계속 수행하는데 비해, Do Until 문은 조건식이 True가 될 때까지 명령을 수행합니다.

Do [Until 조건]
    … 어쩌고 …
    … 저쩌고 …
    Exit Do
    … 어쩌고 저쩌고 …
Loop
Do
    … 어쩌고 …
    … 저쩌고 …
    Exit Do
    … 어쩌고 저쩌고 …
Loop [Until 조건]

While이 Until로 바뀌었다는 것 말고는 Do ~ While 구문과 똑같은 형태지요? 사용예제 역시 마찬가지입니다. While을 Until로 바꿔줄려면 True와 False를 서로 바꿔주면 되겠지요? 즉 아래와 같이 말입니다.

Sub DoUntilDemo()
    Do Until IsEmpty(ActiveCell)
        ActiveCell.Value = 0
        ActiveCell.Offset(1, 0).Select
    Loop
End Sub
Sub DoUntilDemo2()
    Do
        ActiveCell.Value = 0
        ActiveCell.Offset(1, 0).Select
    Loop Until IsEmpty(ActiveCell)
End Sub

이렇게 말입니다. 실행순서를 제어하는 구문은 실제 프로그래밍 작업시 빈번하게 사용되는 것들입니다. 다섯 가지 밖에 안되므로 잘 정리해 두시기 바랍니다.

마무리

다음 시간에 또…

정리 — 반복문 핵심 정리

구문 형태 특징
For ~ Next For i = 1 To 100 [Step 값] 횟수를 정해 반복
Do While Do While Not IsEmpty(ActiveCell) 조건이 True인 동안 반복
Do Until Do Until IsEmpty(ActiveCell) 조건이 True가 될 때까지 반복
Loop While / Until Loop While 조건 적어도 한 번은 실행

자주 묻는 질문 (FAQ)

Q1. For ~ Next에서 Step을 생략하면 어떻게 되나요?

디폴트값으로 1이 지정됩니다.

Q2. Do While과 Do Until의 차이는 무엇인가요?

Do While은 조건식이 True인 동안, Do Until은 조건식이 True가 될 때까지 명령을 수행합니다.

Q3. 조건을 Loop 뒤에 두면 무엇이 달라지나요?

Do ~ Loop 사이의 실행문을 적어도 한 번은 실행하게 됩니다.

마치며

실행순서를 제어하는 구문은 실제 프로그래밍에서 빈번하게 사용되는 것들이며 다섯 가지뿐이므로 잘 정리해 두시기 바랍니다.