엑셀에서 셀에 들어간 데이터 중 동일한 글자색의 개수가 몇 개인지 어떻게 알아낼 수 있을까요? 기존에 제공하는 함수를 아무리 쥐어짜도 알아낼 수 없습니다. VBA 로 함수를 만들어서 구할 수 밖에 없습니다. 오늘은 VBA 코드로 사용자 정의 함수를 만들어 색깔이 같은 데이터가 몇 개인지 알아내 보겠습니다.
▼ 특정 영역에서 동일한 글자색의 데이터가 몇 개나 있는지 파악하기 위해서는 사용자정의 함수를 만들어야 합니다. 샘플 데이터에서 빨간색과 검은색 글자의 개수를 구할 것입니다.
▼ 함수 제작을 위해서 [개발도구] 탭 > [Visual Basic] 리본 메뉴를 클릭합니다. 그리고 Visual Basic Editor 창을 띄웁니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 문자열 자르기, LEFT RIGHT 함수를 이용해 문자열 추출하기 ▶ 엑셀 VBA 연산자 사용해서 String 문자열을 합치기 ▶ 엑셀 VBA 문자열 글자 하나씩 추출하기 ▶ 엑셀 VBA 주민번호, 이메일 문자열 잘라 내는 방법 ▶ 엑셀(Excel) - VBA 숫자를 문자로 변환하는 방법 |
▼ VBA 편집창이 뜨면 왼쪽 탐색기에서 Module1 을 선택합니다. 만약 Module1 가 없다면 오른쪽 마우스를 눌러 [삽입] > [모듈] 메뉴를 선택합니다.
▼ 모듈을 선택하고 오른쪽 편집화면으로 가서 함수를 작성합니다. 주의할 것은 사용자 정의 함수를 만들려면 함수명 앞에 Function 을 붙여야합니다.
▼ 함수에 들어가는 소스를 설명하겠습니다. 인수는 2개입니다. 첫 번째 인수는 구분할 폰트 색상이 들어가 있는 셀 주소입니다. 셀 안에 들어가 있는 색상값을 추출해서 쓰기 위해서 입니다. 두 번째 인수는 계산할 데이터가 있는 영역입니다. 이렇게 두 개의 인수 값이 들어오면 Font.Color 로 글자의 색상 값을 가져와 셀에 있는 폰트값을 하나씩 비교합니다. 만약 동일한 색상이라면 숫자를 증가시켜 함수명인 CountColor 변수에 저장합니다.
Function CountColor(range_data As Range, criteria As Range) Dim datax As Range Dim xcolor As Long xcolor = range_data.Font.Color For Each datax In criteria If xcolor = datax.Font.Color Then CountColor = CountColor + 1 End If Next datax End Function |
▼ 함수 작업이 끝나면 Visual Basic Editor 창을 닫고 워크시트로 돌아갑니다. 이제 함수를 찾아서 계산을 해 보겠습니다. fx 를 눌러 함수 마법사를 띄웁니다. 범주 선택을 사용자 정의로 바꾸면 직접 만든 함수들을 볼 수 있습니다. CountColor 함수를 선택합니다.
▼ 사용자 정의 함수 CountColor 의 첫 번째 인수로 빨간색 글자가 있는 셀 주소를 선택합니다. 그리고 두 번째 인수로 계산할 영역을 드래그해서 넣습니다.
▼ 아래는 동일한 색상값이 있는 글자의 개수를 구하기 위해 CountColor 를 적용한 결과 입니다. 빨간색은 2개, 검은색은 3개가 나왔네요. 이상으로 셀 영역에서 동일한 색상이 있는 글자 개수를 구하기 위해 VBA 를 이용해서 사용자 정의 함수를 만들어 보았습니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 문자열 자르기, LEFT RIGHT 함수를 이용해 문자열 추출하기 ▶ 엑셀 VBA 연산자 사용해서 String 문자열을 합치기 ▶ 엑셀 VBA 문자열 글자 하나씩 추출하기 ▶ 엑셀 VBA 주민번호, 이메일 문자열 잘라 내는 방법 ▶ 엑셀(Excel) - VBA 숫자를 문자로 변환하는 방법 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 통합 문서 문서가 열리는 순간 기능 구현하기 (0) | 2022.05.03 |
---|---|
엑셀 VBA 개체, 속성, 함수, 이벤트 사용법과 사례 검색해서 참고하기 (0) | 2022.04.26 |
엑셀 VBA 이항 논리 연산자 And, Or, Xor 와 단항 논리 연산자 Not 사용하기 (0) | 2022.04.19 |
엑셀 VBA Function 와 Sub 프로시저의 차이점과 사용법 알아 보기 (0) | 2022.04.18 |
엑셀 VBA 중복 데이터 재귀 호출과 반복문 사용해서 삭제하기 (0) | 2022.04.05 |
엑셀 VBA 입력된 값 형식 확인 Information 관련 함수 모음 (0) | 2022.04.01 |
엑셀 VBA 이미지 셀 영역에 맞춰서 넣기, ShapeRange 함수 이용 (1) | 2022.03.28 |
엑셀 VBA 날짜 차이를 계산하는 DateDiff 함수 사용하기 (0) | 2022.03.26 |