- 최초 작성일: 2017-08-08
- 최종 수정일: 2026-09-30
- 조회수: 13 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: VBA 파워 코딩 236회 - 컬러 밴드 만들기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
표에 한 행씩 걸러 색을 입히는 '컬러 밴드'는 표를 훨씬 읽기 편하게 만들어 줍니다. 조건부 서식으로도 만들 수 있지만, 이번에는 간단한 VBA 코드로 직접 만들어 보겠습니다.
컬러 밴드(Color Band) 코드로 만들기
핵심 요약: 컬러 밴드를 만드는 ColorBanding 프로시저
ColorBanding 프로시저는 Application.InputBox로 대상 영역을 선택받고, 이름 정의된 기준 셀의 색상을 홀수 행에만 입혀 컬러 밴드를 만듭니다.
- 영역 선택: Application.InputBox(Type:=8)로 Range 선택
- 색상 지정: CellColor로 이름 정의된 셀의 Interior.Color 사용
- 밴드 적용: rngCell.Row Mod 2 = 1인 행에만 색 지정
- 삭제: DelColorBand 프로시저로 MyTable 색상 일괄 제거
컬러 밴드, 코드로 만들기
컬러 밴드를 만드는 방법에는 여러 가지가 있습니다. 조건부 서식을 이용하는 방법을 다룬 적도 있는데, 오늘은 간단한 코딩으로 해결해 보겠습니다.
기준이 될 셀에 색을 지정하고 '컬러 밴드 설정' 버튼을 클릭하면, 아래 표에 지정한 색상과 같은 컬러 밴드가 한 행씩 걸러 생기도록 만들어 보겠습니다. 색상을 지정할 영역에는 미리 MyTable이라는 이름을, 기준 셀에는 CellColor라는 이름을 정의해 두었습니다.
ColorBanding 프로시저 작성하기
(1) 표준 모듈에 다음 코드를 입력합니다. Application.InputBox로 영역을 선택받고, Range("CellColor").Interior.Color로 기준 색상을 가져온 다음, For Each ~ Next 문으로 각 행을 돌면서 홀수 행에만 색을 입힙니다.
Sub ColorBanding()
Dim rngTarget As Range
Dim rngCell As Range
Dim lngColor As Long
Dim strTargetAddress As String
On Error GoTo ET
strTargetAddress = Range("MyTable").Address
Set rngTarget = Application.InputBox("영역을 선택하세요", "영역 선택", Default:=strTargetAddress, Type:=8)
lngColor = Range("CellColor").Interior.Color
For Each rngCell In rngTarget.Rows
If rngCell.Row Mod 2 = 1 Then
rngCell.Interior.Color = lngColor
Else
rngCell.Interior.Color = xlNone
End If
Next rngCell
ET:
If Err.Number <> 0 Then
MsgBox Err.Description, , "에러 발생"
Exit Sub
End If
End Sub
Sub DelColorBand()
Range("MyTable").Interior.Color = xlNone
End Sub
참고: 이름 정의 활용
코드에서 Range("MyTable"), Range("CellColor")처럼 셀 주소 대신 정의된 이름을 사용했습니다. 어떤 영역에 어떤 이름이 정의되어 있는지는 이름 상자를 통해 확인할 수 있습니다. 셀에 이름을 정의해 두고 코딩 시 활용하면 훨씬 편리합니다.
(2) 컬러 밴드를 지우고 싶다면 다음과 같이 간단한 프로시저 하나만 더 추가하면 됩니다.
Sub DelColorBand()
Range("MyTable").Interior.Color = xlNone
End Sub
참고: 이미지에 대하여
이 글은 원래 네이버 포스트에 게재되었던 글로, 네이버 포스트 서비스 종료로 네이버 블로그로 옮기는 과정에서 원본 이미지가 소실되었습니다. 코드와 사용 방법은 원문 그대로이며, 실제 화면 구성은 원본 워크시트를 참고하시기 바랍니다.
간단하죠? 여러 형태로 응용이 가능합니다. On Error 문으로 사용자가 InputBox에서 '취소'를 누르는 경우까지 대비해 두었다는 점도 눈여겨보시기 바랍니다.
정리 — ColorBanding / DelColorBand 프로시저
| 프로시저 | 역할 |
|---|---|
| ColorBanding | 선택한 영역의 홀수 행에 지정한 색으로 컬러 밴드 적용 |
| DelColorBand | MyTable 영역의 컬러 밴드(배경색) 모두 제거 |
| Application.InputBox | Type:=8 옵션으로 셀 범위를 사용자로부터 선택받음 |
자주 묻는 질문 (FAQ)
Q1. 짝수 행에 색을 입히고 싶으면 어떻게 하나요?
코드의 If rngCell.Row Mod 2 = 1 부분을 If rngCell.Row Mod 2 = 0으로 바꾸면 짝수 행에 색이 입혀집니다.
Q2. InputBox에서 '취소' 버튼을 누르면 오류가 발생하나요?
On Error GoTo ET 구문으로 오류를 잡아 MsgBox로 안내한 뒤 Exit Sub로 안전하게 빠져나가도록 처리되어 있습니다.
Q3. MyTable, CellColor 이름은 어디서 확인하나요?
수식 입력줄 왼쪽의 이름 상자를 클릭하면 통합 문서에 정의된 이름 목록을 확인할 수 있습니다. 이름 상자에서 이름을 선택하면 해당 영역으로 바로 이동합니다.
마치며
표에 줄무늬 하나 넣는 것도 이렇게 코드로 만들어두면, 버튼 한 번으로 언제든 다시 쓸 수 있어 편합니다. 이름 정의와 InputBox를 함께 활용하는 감을 익혀 보세요!