- 최초 작성일: 2002-12-13
- 최종 수정일: 2026-09-26
- 조회수: 30 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 색상별 정렬하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
Style is the man himself. Style is the dress of thoughts. 글은 곧 그사람 자신이다. 문체는 품고있는 사상의 의상이다. 그래서 옛 사람들은 身言書判을 통해 그 사람의 됨됨이를 파악했나 봅니다.
X0256, 257 강좌에서 색상별 필터링 하는 방법, 합계 구하는 방법에 대해 소개를
드린 적이 있었습니다. 요즘도 잊을만 하면 한번씩 문의를 하시는 분이 있는 것으로
미루어… 이런 류의 작업을 하시는 분이 많나 봅니다.
해서 색상별로 정렬하는 것을 다시 한번 다루어 보도록 하겠습니다.
다루긴 다루는데 지난 강좌들과 똑같이 하면,
'Exceller… 드디어 강좌 소재가 다 떨어졌나보군! 강좌를 재탕하다니...'
하실 테니까 이번 시간에는 좀 다른 방법으로 접근해 보겠습니다.
X0256, 257 강좌에서는 Excel4Macro 함수 중에서 Get.Cell 함수를 사용하였습니다.
이번 시간에는 사용자 정의 함수를 만들어 워크시트 상에서 적용을 시켜보도록
합니다. 강좌의 성격상 VBA 강좌 시간에 다루는 것이 적합하겠지만 강좌의 연속성
측면에서 그렇게 하는 것이니 이해하시기 바랍니다.
색상별 정렬하기
핵심 요약
- 색상별 정렬하기에 필요한 핵심 작업 흐름과 엑셀 활용 방법을 원본 강좌의 순서대로 정리합니다.
- 색상별정렬, 정렬, 셀색상 등 원본에서 사용된 주요 기능과 수식을 예제와 함께 확인할 수 있습니다.
- 원본 예제 데이터와 설명을 바탕으로 실제 작업에 적용할 수 있도록 구성했습니다.
| DATA | 글자색 | 배경색 |
|---|---|---|
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
| =INT(RAND()*1000) | =findcolnum(RC[-1]) | =findcolnum(RC[-2],FALSE()) |
색상별로 필터링을 하거나 정렬을 하고자 할 때 데이터 상에서 바로 적용이 되도록
할 수는 없습니다. 현재로선…
지난번에 Get.Cell 함수를 사용할 때도 그러하였지만, 색상의 ColorIndex 값을
먼저 구한 다음, 이것을 이용하여 작업을 하는 방법을 통해 가능하게 되는 것입니다.
사용자 정의 함수를 사용하는 방법도 마찬가지 입니다. 위에서 보시다시피…
위 빨간색 영역에는 아래의 수식이 들어있습니다.
| 글자색 | =findcolnum(B32) |
|---|---|
| 배경색 | =findcolnum(B32,FALSE) |
FindColNum 이라는 사용자 정의 함수는 아래와 같습니다.
Function FindColNum(Range_array As Range, Optional Find_type As Boolean = True)
' 함수 시작부분부터 예사롭지가 않군요. 이 함수는 두 개의 인수를 가집니다.
' Range_array는 ColorIndex 값을 알아낼 셀, Find_type은 셀 배경 색상값을 구할 것이냐 아니면
' 글자색을 구할 것이냐를 구분하기 위한 구분자입니다.
' 그런데 앞에 Optional 이라는 요상한 단어가 붙어있어서 보는 사람들에게 겁을 주고 있네요.
' 우리가 자동차를 살 때 기본 사양으로 받는 품목이 있고 옵션으로 돈을 추가로 내고 설치하는
' 품목이 있지요? 이 FindColNum 함수의 경우, 구분자, 즉 셀 배경색을 구할 것인가 글자색을
' 구할 것인가 하는 부분이 옵션이라는 것입니다.
' 다시 말하자면, 특별히 옵션 사양을 지정하지 않는 이상 기본적으로 Find_type을 True 값으로
' 설정하겠다는 의미입니다. 그러면 True 값으로 설정해서는 어떻게 한다는 것인가? 그것은…
' 아래에 가면 아시게 됩니다.
Dim lngColorIndex As Long
If Range_array.Cells.Count > 1 Then
' 만약 선택된 영역의 셀 수가 2개 이상이면 첫번째 셀을 대상으로 합니다.
Set Range_array = Range_array.Cells(1)
End If
With Range_array
' 선택된 Range_array에 대해 글자색을
If Find_type = True Then
' Find_type의 값이 True이면 글자의 색을 파악하고
lngColorIndex = .Font.ColorIndex
Else
' 그렇지 않으면 배경색을 파악합니다.
lngColorIndex = .Interior.ColorIndex
End If
End With
FindColNum = lngColorIndex
End Function
기본 원리만 이해하신다면 그리 복잡하지 않지요?
보너스로 한 가지 더!
언젠가 강좌 시간에 소개를 드린 듯도 한데…
이런 식으로 사용자 정의 함수를 만들고 '삽입-함수' 메뉴를 클릭해 보면,
'사용자 정의'라는 범주 안에 우리가 만든 함수가 들어 있습니다.
그런데 아래의 그림을 보면 '정보'라는 범주 안에 FindColNum 함수가 들어있지요?
이것은 아래와 같이 MacroOptions 메서드를 이용하시면 됩니다.
Sub ChangeCategory()
Application.MacroOptions macro:="FindColNum", _
Description:="글자 또는 셀 배경색 ColorIndex 값을 알려줍니다", _
Category:=9 ' 정보
End Sub
여기서 Category 속성의 값은 아래의 표를 참고하시면 되겠습니다.
| Category | Category Name |
|---|---|
| 0 | 모두 |
| 1 | 재무 |
| 2 | 날짜/시간 |
| 3 | 수학/삼각 |
| 4 | 통계 |
| 5 | 찾기/참조 영역 |
| 6 | 데이터베이스 |
| 7 | 텍스트 |
| 8 | 논리 |
| 9 | 정보 |
| 10 | Commands(이 범주는 화면 상에 표시되지 않습니다) |
| 11 | Customizing(이 범주도 숨겨져 있습니다) |
| 12 | Macro Control(이 범주도 숨겨져 있습니다) |
| 13 | DDE/External(이 범주도 숨겨져 있습니다) |
| 14 | 사용자 정의(Default) |
| 15 | 공학(이 범주는 분석 도구를 추가설치 한 경우 나타납니다) |
오늘은 여기까지…
Exceller's Book: 엑셀 XP 예제 활용 - 아무도 가르쳐주지 않는 엑셀 XP 비법/디지털북스刊
엑셀을 처음 접하는 분들, 엑셀을 몇 년간 사용해 왔으나 엑셀의 체계를
다잡고자 하는 분들, 그리고 '이제 엑셀에 대해서는 나를 당할자가
없도다'라고 생각하시는 분들도 참고하시기 바랍니다.
마치며
이번 강좌에서는 '색상별 정렬하기'과 관련된 작업 방법을 원본 예제와 함께 살펴보았습니다. 필요한 부분을 하나씩 적용해 보시기 바랍니다.