- 최초 작성일: 2003-08-26
- 최종 수정일: 2026-09-30
- 조회수: 11 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 일정 간격마다 밑줄 긋기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
No man's knowledge here can go beyond his experience. 어떤 지식도 경험과는 비교될 수 없다.
간접 경험도 물론 중요하지만, 실제로 몸을 수고롭게 하여 얻은 실제 경험만은 못한 법이겠지요.
일정 간격마다 밑줄 긋기
핵심 요약: 일정 간격으로 밑줄 긋기
행 번호를 간격으로 나눈 나머지가 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 연산자는 일정 주기로 반복되는 작업에 자주 쓰이므로 다양하게 응용해 보시기 바랍니다.