- 최초 작성일: 2001-03-16
- 최종 수정일: 2026-09-30
- 조회수: 13 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 특정 글자색 합계 구하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
이번 시간에도 게시판에 올라온 질문 하나를 살펴봅니다.
안녕하세요?
오랫만에 들어 왔습니다. 질문 하나 드릴께요.
자료를 작성할 때 글자색을 다르게 하여 표시가 나도록 했는데요…
이 중에서 특정 색깔이 있는 셀의 합계를 구하려면 어떻게 해야 하는지요?
재미있는 질문을 주셨군요. ^^ 일단 예제 데이터를 만들어야 하는데 손으로 만들려면 힘이 드니까… 아래의 버튼을 누르세요.
특정 글자색 합계 구하기
핵심 요약: 글자색 합계
기준 셀을 선택받아 같은 글자색의 셀들을 Union으로 모은 뒤 Sum 함수로 합계를 구합니다.
- 1단계: Application.InputBox(Type:=8)로 기준 셀을 선택받습니다.
- 2단계: For Each로 Font.ColorIndex가 같은 셀을 Union으로 모읍니다.
- 3단계: Application.Sum으로 합계를 구해 MsgBox에 표시합니다.
Step 1: 예제 데이터와 실행 결과
이제 아래의 버튼을 누른 다음, 위 데이터 영역 내에 있는 임의의 셀을 선택해 보시기 바랍니다.
질문 내용처럼 사용자가 선택한 글자색을 가진 자료들의 합계가 구해지지요?
Step 2: SumByFontColor 프로시저
Sub SumByFontColor()
Dim rngTarget As Range
Dim rngFont As Range
Dim rngCell As Range
Dim rngSame As Range
Dim Msg As String
On Error GoTo ET
'//변수들을 선언해 줍니다. 만약 에러가 발생했을 경우에는 ET로 갑니다.
Set rngTarget = Range("MyRange")
Set rngFont = Application.InputBox("합계를 구할 글자색 셀을 선택하세요", _
"셀 선택//By Exceller", Type:=8, Default:=rngTarget.Cells(1).Address)
'//사용자가 합계를 구하고자 하는 글자색이 있는 셀을 마우스로 선택할 수 있도록
'//설정합니다. 디폴트 값으로 MyRange 영역의 첫번째 셀이 InputBox 내에 나타나도록
'//지정해 주었습니다.
'//여기서 MyRange라는 영역은 위의 분홍색 부분으로 미리 정의해 두었습니다.
If rngFont.Cells.Count > 1 Then
Msg = Msg & "유효하지 않은 셀을 선택하셨습니다" & vbCr
Msg = Msg & "범위를 다시 선택하세요"
MsgBox Msg, , "선택 오류//By Exceller"
Exit Sub
'//두 개 이상의 셀이 지정된 경우, 에러 메시지를 출력하고 프로시저를 빠져 나갑니다.
End If
For Each rngCell In rngTarget
If rngCell.Font.ColorIndex = rngFont.Font.ColorIndex Then
If rngSame Is Nothing Then
Set rngSame = rngCell
Else
Set rngSame = Union(rngSame, rngCell)
End If
End If
'//순환문을 돌면서 지정한 셀의 폰트 색상과 같은 셀을 발견할 경우, 그 셀을
'//rngSame 변수에 Union으로 차곡차곡 합쳐 둡니다.
Next rngCell
If rngSame Is Nothing Then Exit Sub
'//rngSame에는 사용자가 지정한 글자색과 같은 색을 가진 셀들이 들어 있습니다.
rngSame.Font.ColorIndex = 2
rngSame.Interior.ColorIndex = 1
Msg = "선택하신 색 글자의 합계는 " & vbCr & vbCr
Msg = Msg & Format(Application.Sum(rngSame), "#,##0.000") & vbCr
Msg = Msg & "입니다"
MsgBox Msg, , "합계//By Exceller"
'//시각적인 효과를 위해 대상 셀의 글자색 및 Interior 속성을 다른 색으로 지정합니다.
'//선택된 Range 오브젝트의 숫자들을 더하는 것은 Sum 함수를 사용하시면 되겠지요?
ET:
End Sub
ColorIndex는 56색 팔레트 기준의 색 번호입니다. 표준 색이 아닌 RGB 색까지 정확히 비교하려면 Font.Color 속성 값을 비교하시기 바랍니다. 또 이 코드는 합계를 낸 셀의 글자색과 채우기 색을 실제로 바꾸므로, 원본 서식이 중요하면 미리 복사본에서 시험해 보시기 바랍니다.
Step 3: 셀 색상별 합계로 응용하기
이렇게 하시면 되겠지요? 그렇다면 글자색이 아니라 셀 색상에 따라 합계를 구하려면 어떻게 하면 될까요? 이것도 간단합니다. Range 오브젝트의 프로퍼티명만 바꾸어 주면 될 것입니다. 이 정도면… 아! 하는 감탄사가 나와야 하는데…
즉, 글자색에 접근할 때에는 Range 오브젝트의 Font 속성을 사용하였으니까 이번에는 Interior 속성을 변경해 주시면 됩니다. 위의 코드를 약간만 수정하면 될 테니까 설명은 생략합니다.
마무리
오늘은 여기까지…
정리 — 글자색 합계 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 셀 선택받기 | Application.InputBox(..., Type:=8) | 기준 셀 지정 |
| 색 비교 | rngCell.Font.ColorIndex = rngFont.Font.ColorIndex | 글자색 일치 확인 |
| 셀 모으기 | Set rngSame = Union(rngSame, rngCell) | 같은 색 셀 결합 |
| 합계 | Application.Sum(rngSame) | 합계 계산 |
| 셀 색 기준 | Font를 Interior로 변경 | 셀 색상별 합계 |
자주 묻는 질문 (FAQ)
Q1. 특정 글자색의 셀만 더하려면?
대상 셀을 순환하며 Font.ColorIndex가 같은 셀을 모은 뒤 Application.Sum으로 합계를 구합니다.
Q2. 셀 배경색 기준으로 합계를 구하려면?
코드에서 Font 속성 대신 Interior 속성을 사용하도록 바꾸면 됩니다.
Q3. Application.InputBox의 Type:=8은 무엇인가요?
사용자가 워크시트에서 셀 범위를 마우스로 선택하도록 하고 Range 개체를 돌려받는 유형입니다.
마치며
속성 이름만 바꾸면 글자색뿐 아니라 셀 색상별 합계도 같은 방법으로 구할 수 있습니다.