엑셀에서 셀에 들어간 데이터 중 동일한 글자색의 개수가 몇 개인지 어떻게 알아낼 수 있을까요? 기존에 제공하는 함수를 아무리 쥐어짜도 알아낼 수 없습니다. 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 날짜 함수 CDate 문자열을 날짜로 변환 (0) | 2024.03.28 |
---|---|
엑셀 VBA GoTo 문 이용해서 줄로 분기하기 (2) | 2024.03.23 |
엑셀 VBA Function 와 Sub 프로시저의 차이점과 사용법 알아 보기 (1) | 2024.03.16 |
엑셀 VBA 모듈(Module) 소스 파일 관리하기 (1) | 2024.03.05 |
엑셀 VBA 이미지 셀 영역에 맞춰서 넣기, ShapeRange 함수 이용 (2) | 2024.02.28 |
엑셀 VBA 지정한 파일 삭제하기 (0) | 2024.02.17 |
엑셀 VBA 행 열 숨기기와 보이기 구현 (0) | 2024.02.11 |
엑셀 VBA 시트에 있는 내용을 파일, 텍스트로 출력하기 (2) | 2024.01.28 |