병합된 셀 그룹 내의 각 개별 셀을 계산하지 않고 셀 범위를 통과하여 내용을 색상별로 계산하는 매크로를 어떻게 작성할 수 있습니까?
예를 들어, 그림에서는 노란색 2개와 녹색 3개를 반환하는 매크로를 원하지만 제가 작성한 매크로는 병합된 노란색 셀 7개를 개별적으로 계산하므로 노란색 8개를 반환합니다....
답변1
윽. 이 샘플에는 피해야 할 두 가지 나쁜 관행이 있습니다. 즉, 의미를 전달하기 위해 셀을 색상으로 구분하는 것과 셀을 병합하는 것입니다. 하지 않다. 하지 마세요. 다른 열을 사용하여 상태 또는 범주 값을 결정한 다음 조건부 서식을 사용하여 해당 상태 또는 범주 값을 기반으로 셀 색상을 설정할 수 있습니다. 또한 간단한 워크시트 수식을 사용하여 상태 또는 범주별로 계산을 수행할 수 있습니다.
세포를 병합하면 아스피린보다 더 많은 두통이 발생합니다. 셀을 병합하지 마세요. 이는 선택과 VBA의 논리에 문제를 일으킵니다. 병합하지 말고 워크시트 수식을 사용하여 간단한 계산을 수행하세요. 셀을 병합해야 하는 "필요"는 적절한 데이터 아키텍처와 워크시트 구조를 통해 항상 극복될 수 있습니다.
답변2
나는 전적으로 동의한다@teylyn의 경고이지만 그러한 솔루션에 대한 매우 정당한 이유가 있는 경우 예를 들어 그러한 기능을 사용할 수 있습니다.
Function ColorCount(rng As Range, pat) As Long
Dim cell As Range, cnt As Long
Select Case TypeName(pat)
Case "Range": pat = pat.Interior.Color
Case "String": pat = Range(pat).Interior.Color
End Select
For Each cell In rng
If cell.Address = cell.MergeArea(1).Address And _
cell.Interior.Color = pat Then
cnt = cnt + 1
End If
Next cell
ColorCount = cnt
End Function
이 함수는 두 개의 인수를 사용합니다. 첫 번째는 확인할 셀 범위이고, 두 번째는 색상 패턴입니다(참조, 주소 텍스트 또는 숫자 색상 값일 수 있음). 조건부가 아닌 기본 서식의 셀 색상입니다.