• 최초 작성일: 2003-08-26
  • 최종 수정일: 2026-09-30
  • 조회수: 11 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 일정 간격마다 밑줄 긋기

들어가기 전에

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

No man's knowledge here can go beyond his experience. 어떤 지식도 경험과는 비교될 수 없다.

간접 경험도 물론 중요하지만, 실제로 몸을 수고롭게 하여 얻은 실제 경험만은 못한 법이겠지요.

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

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

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


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

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

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

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

일정 간격마다 밑줄 긋기

핵심 요약: 일정 간격으로 밑줄 긋기

행 번호를 간격으로 나눈 나머지가 0인 행에 아래쪽 테두리를 지정하면 일정 간격마다 밑줄을 그을 수 있습니다.

  • 1단계: 이름 정의된 영역의 기존 밑줄을 지웁니다.
  • 2단계: InputBox로 2~10 사이의 간격을 입력받습니다.
  • 3단계: Mod 연산자로 해당 행을 찾아 xlEdgeBottom 테두리를 지정합니다.

Step 1: 무엇을 만들까요?

이번 시간에는 사용자가 지정한 간격마다 자동으로 밑줄을 그리는 방법에 대해 살펴보도록 하겠습니다. 아래 버튼을 클릭하신 다음 2 ~ 10 사이의 숫자를 입력해 보시기 바랍니다.

이 범위를 벗어나는 숫자를 입력하면 InputBox가 계속 나타나므로 다음 단계로 넘어가지 않도록 설정되어 있습니다. 예제 표(세 자리 이하의 임의의 숫자가 채워진 4열 표)에 입력한 간격마다 밑줄이 그려집니다.

Step 2: 코드 살펴보기

코드를 보도록 하겠습니다.

Const ID As String = "www.iExceller.com"
' 여러 곳에서 사용되는 상수를 프로시저 외부에 선언합니다.

Sub DrawLines()

    Dim intLine As Integer
    Dim intTotalRow As Integer
    Dim i As Integer
    Dim strInput As String
    Dim rngTarget As Range
    On Error GoTo ET
    Set rngTarget = Range("MyRange")
    intTotalRow = rngTarget.Rows.Count
    ' MyRange 라는 영역을 작업 대상으로 설정합니다(MyRange가 어떤 영역인지 이름 상자를 통해
    ' 직접 확인해 보시기 바랍니다). 그런 다음 MyRange 영역의 행 수를 세어서 intTotalRow 라는
    ' 변수에 담아둡니다.

    MsgBox "영역 내의 밑줄을 지우겠습니다", , ID
    With Range("Myrange")
    ' 대상 영역 내에 이미 밑줄이 그어져 있을 지도 모르므로 일단 밑줄을 지웁니다.

        .Borders(xlEdgeBottom).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
    End With

    Do
        strInput = InputBox("몇 라인마다 밑줄을 그릴까요?", "2~10 사이의 숫자값만 입력하세요")
        If strInput = "" Then Exit Sub
        intLine = Val(strInput)
    Loop While intLine > 10 Or intLine < 2
    ' Do ~ Loop 반복문을 사용하여 사용자가 2 ~ 10 사이의 숫자가 입력될 때까지 계속합니다.

    For i = 1 To intTotalRow
        If i Mod intLine = 0 Or i = intTotalRow Then
        ' 일정 행마다 반복된다는 것은 다른 말로 하면 일정 값으로 나누어 나머지 없이 떨어진다는
        ' 의미이겠지요? 이것을 컴퓨터(엑셀)가 알아먹을 수 있게 표현하면 위와 같이 될 것입니다.
        ' 그리고 데이터 맨 마지막 줄에는 무조건 밑줄을 그리기 위해 'Or i=intTotalRow' 라는 구문을
        ' 추가해 주었습니다.

            Range("MyRange").Rows(i).Select
            With Selection.Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .Weight = xlThin
            End With
        End If
    Next i
    Range("MyRange").Cells(1).Select
    MsgBox "매 " & intLine & "라인마다 밑줄을 그렸습니다", , ID

ET:
' 실행 도중 예기치 않은 오류가 발생하였을 경우에 대한 에러 트래핑 구문입니다.

    If Err.Number <> 0 Then
        MsgBox Err.Description, , "에러 번호 : " & Err.Number
        Err.Clear
    End If

End Sub

핵심은 i Mod intLine = 0 조건입니다. 일정 행마다 반복된다는 것은 행 번호가 그 값으로 나누어떨어진다는 뜻이므로 Mod 연산자로 판단합니다. 그리고 마지막 행에는 항상 밑줄을 긋도록 Or i = intTotalRow 조건을 더했습니다.

생각보다 코드가 간단하지요? 많이 응용해 보시기 바랍니다.

오늘은 여기까지…

정리 — 밑줄 긋기 핵심 코드

구분 사용한 코드 역할
영역 지정 Range("MyRange") 이름 정의된 대상 영역
밑줄 지우기 .Borders(xlEdgeBottom).LineStyle = xlNone 기존 선 제거
간격 판단 i Mod intLine = 0 간격 배수인 행 판별
마지막 줄 Or i = intTotalRow 마지막 행에도 밑줄
밑줄 그리기 .Borders(xlEdgeBottom).LineStyle = xlContinuous 아래쪽 테두리 지정

자주 묻는 질문 (FAQ)

Q1. 일정 간격마다 실행하려면 어떻게 하나요?

행 번호를 간격으로 나눈 나머지를 구하는 Mod 연산자를 사용해 나머지가 0인 행을 골라냅니다.

Q2. InputBox 입력을 제한하려면 어떻게 하나요?

Do ~ Loop While 구문으로 입력값이 범위를 벗어나면 InputBox를 반복해서 띄웁니다.

Q3. 밑줄은 어떤 속성으로 그리나요?

Borders(xlEdgeBottom)의 LineStyle과 Weight 속성을 지정하면 셀 아래쪽 테두리를 그릴 수 있습니다.

마치며

Mod 연산자는 일정 주기로 반복되는 작업에 자주 쓰이므로 다양하게 응용해 보시기 바랍니다.