반응형
코딩으로 시간 벌기 / 엑셀 VBA

두 번째 이야기: 색깔 있는 셀, 합계도 5초 만에!

물류아재 칵칵 · 엑셀 VBA 시리즈 2편

안녕하세요, 물류와 코딩 사이의 경계에서 성장하고 있는 물류아재 칵칵입니다.

지난 1편에서 CountByColor 함수로 색깔 셀의 개수를 세는 방법을 소개했는데요, 이번에는 색깔 셀의 합계(Sum)를 구하는 SumByColor 함수를 만들어 보겠습니다!


왜 SumByColor가 필요할까요?

예를 들어 이런 상황을 생각해보세요:

📦 실제 물류 업무 사례
월말 정산 시 '지연 출고' 건에 빨간색, '우선 처리' 건에 노란색을 칠해 두었습니다.
이제 색깔별로 출고 수량의 합계를 구해야 하는데, 엑셀 기본 함수로는 불가능합니다.

SUMIF 함수는 텍스트·숫자 조건만 지원하고 셀 색상 조건은 지원하지 않습니다. 그래서 VBA로 직접 만들어야 합니다.


1편 vs 2편 한눈에 비교

함수 기능 사용 예시
CountByColor 색깔 셀 개수 세기 (1편) =CountByColor(A1:A100, D1)
SumByColor 색깔 셀 합계 구하기 (2편 ⭐) =SumByColor(A1:A100, D1)
AverageByColor 색깔 셀 평균 구하기 (보너스) =AverageByColor(A1:A100, D1)

SumByColor 함수 만들기

아래 코드를 VBA 모듈에 붙여넣으세요.

Function SumByColor(rng As Range, colorcell As Range) As Double
Dim cell As Range
Dim colorindex As Long
Dim total As Double

```
'기준 색상의 색상 인덱스 가져오기
colorindex = colorcell.Interior.Color

'범위 내 색상 비교 후 합산
For Each cell In rng
If cell.Interior.Color = colorindex Then
If IsNumeric(cell.Value) Then
total = total + cell.Value
End If
End If
Next cell

SumByColor = total
```

End Function
💡 1편 코드와의 차이점
1편의 CountByColor는 count = count + 1로 개수를 셌다면, 이번 SumByColor는 total = total + cell.Value로 셀의 값을 더합니다.
IsNumeric() 검사를 추가해 텍스트 셀에서 오류가 나지 않도록 안전하게 만들었습니다.

설치 방법 (1편과 동일합니다)

  1. 엑셀 상단 메뉴에서 개발 도구 탭을 클릭합니다.
  2. Visual Basic 버튼을 클릭해 VBA 편집기를 엽니다.
  3. 삽입(I) → 모듈(M) 을 클릭해 새 모듈을 추가합니다.
  4. 위 코드를 복사해 모듈 창에 붙여넣습니다.
  5. 엑셀 시트로 돌아와 =SumByColor(범위, 기준색상셀) 을 입력하면 끝!

실제 사용 예시

' B2:B50 범위에서 E2와 같은 색상인 셀의 합계
=SumByColor(B2:B50, E2)

’ C2:C100 범위에서 F3와 같은 색상인 셀의 합계
=SumByColor(C2:C100, F3)

기준 셀(E2, F3) 자체의 값은 합산에 포함되지 않고 색깔 정보만 참조합니다. 비어있는 색상 셀을 별도로 만들어 두면 편리합니다.


보너스: AverageByColor (평균 구하기)

합계를 구할 수 있으면 평균도 쉽게 만들 수 있습니다. 개수와 합계를 동시에 구해서 나누면 됩니다.

Function AverageByColor(rng As Range, colorcell As Range) As Double
Dim cell As Range
Dim colorindex As Long
Dim total As Double
Dim count As Long

```
colorindex = colorcell.Interior.Color

For Each cell In rng
If cell.Interior.Color = colorindex Then
If IsNumeric(cell.Value) Then
total = total + cell.Value
count = count + 1
End If
End If
Next cell

If count = 0 Then
AverageByColor = 0 '0으로 나누기 방지
Else
AverageByColor = total / count
End If
```

End Function
⚠️ 저장 형식 주의!
VBA 매크로 함수는 파일 저장 시 반드시 매크로 사용 통합 문서 (.xlsm) 형식으로 저장해야 합니다.
일반 .xlsx로 저장하면 매크로가 사라집니다!

CountByColor(1편)와 SumByColor(2편), 두 함수만 있어도 색깔 기반 엑셀 집계 업무의 대부분을 해결할 수 있습니다. 보너스 AverageByColor까지 모듈에 넣어두면 완벽한 색깔 집계 도구 세트 완성!

다음 편에서는 색깔별로 데이터를 자동 정렬하는 매크로를 소개해 드릴 예정입니다. 기대해 주세요!

반응형

+ Recent posts