Warning: array_merge(): Argument #1 is not an array in /home/rhaqjffp/html/wp-includes/blocks/shortcode.php on line 31

Warning: array_merge(): Argument #1 is not an array in /home/rhaqjffp/html/wp-includes/blocks/social-link.php on line 45
곰벌레닷컴 – 페이지 2 – 곰벌레는 느릿느릿~, 곰벌레가 관심있는 자료저장 창고

http://rhaqjffp.com/how-to-make-money-from-creative-writing/

셀 내용이 아닌 셀의 속성에 따른 함수 계산을 하고 싶은 경우가 있는데 엑셀 내장 함수만으로는 구현이 불가능하다. 하지만 VBA 사용자정의 함수를 사용하면 셀 속성에 따른 사용자함수식을 만들 수 있다.

이 포스팅에서는 VBA 로 구현한 지정한 범위 안에 특정 배경색을 지닌 셀이 몇개나 있는지 그 개수를 구하는 사용자함수를 소개해보고자 한다. 그리고 이 사용자함수를 사용했을 때의 문제점 또한 포스팅할 것이다.

VBA 코드

사용자함수를 사용하기 위해선 사전에 VBA 코드를 입력해 둘 필요가 있다. ALT + F11 키를 눌러 VBA Editor 를 열어서 “삽입” > “모듈” 메뉴를 선택하면 열리는 창에 아래 코드를 붙여넣자.

Function CountColor(tar As Range, ref As Range)
    
    Application.Volatile
    
    Dim t As Range
    Dim r As Long
    
    Set t = Intersect(tar, tar.Parent.UsedRange)
    r = ref.Interior.ColorIndex
    
    For Each i In t
        If i.Interior.ColorIndex = r Then
            CountColor = CountColor + 1
        End If
    Next i
 
End Function

코드를 입력한 뒤 다시 엑셀로 돌아오기만 하면 사용할 준비가 된다.

특정 배경색 셀 개수 구하기

= CountColor( 범위, 참고셀 )

“출근일” 열에서 주황색 배경인 셀 개수를 세는 사용자함수를 사용하였다.

위 함수식은 지정한 범위 안에 참고셀과 같은 배경색을 지닌 셀 개수를 반환한다.

위에서 언급한 것처럼 주의해야 할 점이 있다. 처음 사용해보면 제대로 작동하는 것 같지만 “출근일” 열 셀 배경색을 바꿔봐도 함수의 결과값이 변하지 않는다는 것을 알 수 있다. 자동 재계산 Logic 때문인데, 엑셀은 셀 내용이 바뀌어야 재계산을 하지, 글자색이나 폰트변경과 같은 셀 속성이 바뀌는 것만으로는 재계산을 수행하지 않도록 설계되어있기 때문이다.

셀 배경색을 바꾼 다음에 수식 강제 계산 키(ALT + CTRL + SHIFT + F9)를 눌러야 제대로 작동한다. 즉, 배경색 바꾸고 나서는 일일이 이 키를 눌러줘야 한다는 뜻이다.