- 최초 작성일: 2025-01-24
- 최종 수정일: 2026-09-27
- 조회수: 42 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: VBA 파워 코딩 242회 - 두 숫자 사이 개수
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
엑셀에는 수많은 함수(내장 함수, Built-in Function)가 있어서 사용자가 용도에 맞게 사용할 수 있습니다. 하지만 '이런 이런 기능을 수행하는 함수가 분명 있을 텐데...'라고 생각됨에도 불구하고 내장 함수로 만들어져 있지 않은 경우가 있습니다. 이번 시간에 만들어 볼 함수도 바로 그런 종류의 함수입니다.
두 숫자 사이 값의 수를 카운팅해주는 Code
핵심 요약: 두 숫자 사이 값의 개수를 구하는 CountNumber 함수
CountNumber(범위, 숫자1, 숫자2) 사용자 정의 함수는 두 숫자의 크기를 If 문으로 비교한 뒤 CountIfs 함수로 작은 수 이상, 큰 수 이하인 셀의 개수를 구합니다.
- 사용 예: =CountNumber(A1:A100, 1000, 2000)
- 순서 무관: 큰 수와 작은 수의 순서를 바꿔 입력해도 같은 결과
- 만드는 위치: VBE에서 '삽입 - 모듈' 후 코드 입력
- 주의: CountIfs는 엑셀 2007 이상에서 지원
두 숫자 사이 값의 개수 구하기
다음과 같은 데이터가 있다고 할 때, 범위(A1:A100)와 두 숫자(1000과 2000)를 입력하면, 범위 중에서 두 숫자 사이의 값이 몇 개가 있는지 구해 줍니다. 이 경우에는 A1:A100 영역 중에서 1000과 2000 사이의 숫자가 몇 개인지를 카운팅합니다.
CountNumber 사용자 정의 함수 만들기
(1) 워크시트 상태에서 <Alt> + <F11> 키를 눌러서 VBE(Visual Basic Editor) 상태로 들어갑니다.
(2) '삽입 - 모듈' 메뉴를 클릭하여 모듈을 삽입하고 다음 코드를 입력합니다.
Function CountNumber(rngX, X, Y) ' 값을 구할 범위, 두 개의 숫자를 인수로 전달
With Application.WorksheetFunction
If X >= Y Then ' 첫 번째 숫자가 두 번째 숫자보다 크면
CountNumber = .CountIfs(rngX, ">=" & Y, rngX, "<=" & X)
' 두 숫자 범위 내의 수가 몇개인지 구함
Else ' 첫 번째 숫자가 두 번째 숫자보다 작으면
CountNumber = .CountIfs(rngX, ">=" & X, rngX, "<=" & Y)
' X 이상이고 Y이하인 셀의 수를 카운팅하여 결과로 돌려줌.
End If
End With
End Function
참고: 원문 코드 수정
원문 코드의 첫 번째 CountIfs 줄에는 닫는 괄호가 빠져 있어 )를 넣었습니다. 또한 본문의 "If 함수"는 실제로는 If 문이므로 "If 문"으로 고쳤습니다.
(3) 이제 아무 셀에나 가서 =countnumber(범위, 작은 수, 큰 수) 또는 =countnumber(범위, 큰 수, 작은 수) 형태로 수식을 입력해 보세요. If 문을 이용하여 조건 분기 처리를 해 주었기 때문에 큰 수와 작은 수의 순서를 바꿔 지정해도 제대로 작동합니다.
여기서 주의할 점! 엑셀의 워크시트 함수인 CountIfs 함수를 사용했습니다. 이 함수는 엑셀 2007 버전부터 지원됩니다. 따라서 그 이전 버전을 사용하고 있다면 오류가 발생합니다. 엑셀 2007 이전 버전을 사용하신다면 CountIf 함수를 사용하여 코드를 수정해서 사용하세요.
참고: 이미지에 대하여
이 글은 원래 네이버 포스트에 게재되었던 글로, 네이버 포스트 서비스 종료로 네이버 블로그로 옮기는 과정에서 원본 이미지가 소실되었습니다. 위 이미지는 본문 설명을 바탕으로 당시 화면 구성을 재구성한 예시 이미지이며, 실제 엑셀 화면과 세부 디자인(버전별 UI)은 다를 수 있습니다. 이미지 속 A열의 값은 예시로 만든 100개의 숫자이고, 개수(44)는 그 값으로 실제 계산한 결과입니다.
정리 — CountNumber 함수
| 항목 | 내용 |
|---|---|
| 함수 형식 | =CountNumber(범위, 숫자1, 숫자2) |
| 결과 | 두 숫자 사이(작은 수 이상, 큰 수 이하)에 있는 값의 개수 |
| 순서 처리 | If 문으로 두 숫자의 크기를 비교하므로 순서를 바꿔 입력해도 됨 |
| 주의 | CountIfs는 엑셀 2007 이상에서 지원 |
자주 묻는 질문 (FAQ)
Q1. 두 숫자 사이에 있는 값이 몇 개인지 구하는 내장 함수가 있나요?
그런 용도로 만들어진 내장 함수는 없습니다. 이 강좌의 CountNumber처럼 사용자 정의 함수를 만들어 CountIfs 함수를 활용하면 됩니다.
Q2. 큰 수와 작은 수의 순서를 바꿔 입력해도 되나요?
됩니다. 코드에서 If 문으로 첫 번째 숫자가 두 번째 숫자보다 큰지 비교하여 처리하므로 =CountNumber(범위, 작은 수, 큰 수), =CountNumber(범위, 큰 수, 작은 수) 어느 쪽으로 입력해도 같은 결과가 나옵니다.
Q3. 엑셀 2007 이전 버전에서는 오류가 발생합니다.
CountIfs 함수는 엑셀 2007 버전부터 지원됩니다. 그 이전 버전에서는 CountIf 함수를 사용하여 코드를 수정해서 사용하세요.
마치며
없는 함수는 만들어 쓰면 됩니다. CountNumber처럼 자주 쓰는 계산을 사용자 정의 함수로 만들어 보세요!
VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 사이트 정문 왼쪽에 있는 'VBA 강좌 - VBA 입문강좌'를 읽어보시면 이해가 빠릅니다.