COUNTIF 개수가 안 맞을 때: 공백·대소문자·와일드카드·자료형 확인하기
같아 보이는 코드인데 COUNTIF가 적게 세거나, 별표가 든 코드 하나를 찾았는데 여러 개가 나오나요? 원본을 지우거나 조건을 넓히기 전에 실제 값과 조건의 의미를 나누어 확인하세요.
원인
COUNTIF는 범위에서 조건에 맞는 셀을 셉니다. 문자의 대소문자를 구분하지 않으며, 조건의 *와 ?는 패턴 문자입니다. 끝 공백이나 실제 자료형도 비교에 영향을 줄 수 있습니다. ‘같은 코드’라는 업무 규칙과 함수의 비교 규칙이 같다는 전제부터 확인해야 합니다. Microsoft COUNTIF
재현: 합성 코드 8개를 그대로 보기
합성 코드 CSV의 머리글은 record_id,code, 데이터는 8건입니다. code 열의 순서는 다음과 같습니다.
A100
a100
A100␠
AB100
A*100
A?100
A1100
A100X
여기서 ␠는 설명용 표시입니다. 실제 파일의 세 번째 코드는 끝에 ASCII 공백 한 개가 있는 A100 이며 기호␠가 들어 있지는 않습니다.
파일과 같은 폴더에서 Python으로 실제 문자열과 길이를 확인할 수 있습니다.
import csv
with open('guide-08-countif-codes.csv', encoding='utf-8-sig', newline='') as f:
codes = [row['code'] for row in csv.DictReader(f, strict=True)]
for value in codes[:3]:
print(repr(value), len(value))
출력은 다음과 같습니다.
'A100' 4
'a100' 4
'A100 ' 5
이는 CSV 문자열을 확인한 결과이며 Excel 셀 유형이나 COUNTIF를 실행한 결과는 아닙니다. Python csv
해결 1: 범위와 공백부터 확인하기
Excel 예제에서는 code가 B2:B9에 있다고 가정합니다. 다음 수식의 범위와 조건을 실제 파일에 맞게 확인합니다.
=COUNTIF($B$2:$B$9,"A100")
이 합성 원본에서 Excel로 확인할 기대값은 2입니다. A100과 a100은 함께 세지만 끝 공백이 있는 값은 따로 확인해야 합니다. 이 수치는 Excel에서 직접 실행한 결과가 아니므로 사용하는 Excel에서 확인하세요.
CSV 도우미의 CSV 검사기에서는 8개 데이터·2열과 원문 미리보기를 확인합니다. 현재 모든 셀의 공백을 자동 경고하거나 표시 기호로 바꾸는 기능은 없습니다. 미리보기만 보고 공백이 없다고 판단하지 말고 원문·길이·읽기 전용 편집기를 함께 사용하세요.
공백이 잘못된 것인지 자료 담당자와 확인한 뒤 사본에서 수정합니다. 공백을 무시한 비교 결과가 달라진다는 사실과 원본 값을 정리해야 한다는 결정은 다릅니다.
해결 2: 대소문자를 구분해야 하는 업무인지
COUNTIF는 A100과 a100을 대소문자로 구분하는 집계가 아닙니다. 조건을 대문자로 적는 것만으로 구분 기능이 켜지지 않습니다.
업무 규칙이 두 코드를 별개로 취급한다면 대소문자를 구분하는 다른 비교 방법을 별도로 검토해야 합니다. 반대로 같은 코드로 취급한다면 함께 세는 것이 정상일 수 있습니다. 어떤 규칙이 필요한지 먼저 정하세요.
해결 3: 패턴과 문자 별표를 구분하기
*는 길이 0을 포함하는 문자열, ?는 문자 한 개를 뜻합니다. 실제 별표나 물음표를 찾을 때는 앞에 ~를 붙입니다. Microsoft 패턴 문자 설명
이 합성 원본의 문자 조건을 비교하면 다음과 같습니다. 아래는 공식 규칙과 제한된 ASCII 모형에 따른 Excel 확인용 기대값이며 Excel 실측표가 아닙니다.
| 조건 | 의미 | 기대 개수 |
|---|---|---|
| A100 | 대소문자를 구분하지 않는 해당 코드 | 2 |
| A*100 | A와 100 사이 임의 문자열 | 6 |
| A?100 | A와 100 사이 문자 한 개 | 4 |
| A~*100 | 문자 별표가 들어 있는 A*100 | 1 |
| A~?100 | 문자 물음표가 들어 있는 A?100 | 1 |
| A100* | A100 뒤 임의 문자열 | 4 |
Excel 수식에서는 위 조건을 큰따옴표로 묶습니다. 예를 들어 =COUNTIF($B$2:$B$9,"A~*100")입니다.
공백을 해결하려고 A100*로 조건을 넓히면 A100X까지 포함합니다. 끝 공백 제거와 동일한 처리가 아닙니다. 조건을 바꾼 뒤 실제로 포함되는 코드들을 원본에서 대조하세요.
다음 Python 코드는 이 ASCII 예제의 패턴만 명시적으로 옮겨 확인하는 보조 모형입니다. Excel COUNTIF의 숫자·날짜·비교 연산자·빈 셀·오류·로캘 규칙을 구현한 것이 아닙니다.
import re
patterns = {
'A100': r'A100',
'A*100': r'A.*100',
'A?100': r'A.100',
'A~*100': r'A\*100',
'A~?100': r'A\?100',
'A100*': r'A100.*',
}
for criterion, pattern in patterns.items():
count = sum(re.fullmatch(pattern, value, re.I) is not None for value in codes)
print(criterion, count)
출력 개수는 표의 순서대로 2,6,4,1,1,4입니다. 이 모형의 결과가 실제 Excel COUNTIF 결과와 같다는 보장은 아닙니다.
해결 4: 숫자와 문자, 조건을 함께 확인하기
CSV는 Excel 셀의 실제 자료형을 보관하지 않습니다. 원문 123이 보인다는 이유로 숫자형이라고 확정하거나, CSV 필드에 따옴표가 있다는 이유로 Excel 문자형이라고 확정하지 마세요.
비교표는 Excel에 따로 만듭니다. C2에는 숫자 123, C3에는 수식 ="123", C4에는 숫자 1234, C5에는 수식 ="1234"를 입력하고 ISTEXT·ISNUMBER로 실제 유형을 확인하는 절차입니다. 이는 아직 실제 Excel에서 실행하지 않은 확인용 구성안입니다.
=ISTEXT(C2)
=ISNUMBER(C2)
=COUNTIF(C2:C5,"12*")
12*처럼 문자 패턴을 찾는 조건을 검수할 때는 숫자·문자 값의 포함 여부도 직접 대조합니다. 이 구성안의 문자 패턴 모형 기대값은 2지만 실제 Excel에서 확인한 뒤 사용해야 합니다.
모든 숫자 조건에서 숫자 123과 문자 123이 반드시 따로 세어진다고 단정하지 않습니다. 조건에 따른 암묵 변환 규칙을 VLOOKUP이나 Python 문자열 비교에서 그대로 가져오지 마세요. 숫자로 강제 변환하면 앞의 0이 있는 식별자까지 달라질 수 있으므로 업무상 의미와 원본을 확인합니다. 표시 형식 변경만으로 실제 값의 변환이 끝났다고 가정하지 않습니다.
CSV 도우미와 Excel의 역할
CSV 도우미에서: 레코드·열 개수·원문 구조를 확인합니다. 중복 비교 도구의 기준 열·앞뒤 공백 무시·대소문자 무시 옵션으로 비교 기준에 따른 차이를 볼 수 있습니다. 이 예제는 code 기준으로 대소문자 구분 시 제외 대상 0건, 대소문자 무시 시 1건, 공백까지 무시 시 2건입니다. 정상 주문을 지우라는 뜻이 아닙니다.
이 옵션은 비교용이며 남긴 값의 공백·대소문자를 수정하지 않습니다. 중복 비교기는 COUNTIF와 같은 와일드카드·숫자 비교 엔진이 아닙니다. 제외 대상 수를 COUNTIF 조건 일치 개수와 같은 수치로 해석하지 마세요.
Excel에서: 실제 셀 자료형·수식 범위·조건·COUNTIF 결과를 검수합니다. CSV 도우미에는 이 수식을 실행하거나 오류를 자동 복구하는 기능이 없습니다.
한계
이 글은 공백 한 개와 ASCII 코드의 제한된 문자 모형을 다룹니다. 비분리 공백·전각 문자·Unicode 대소문자·숫자 조건·빈 셀·오류 셀·255자를 넘는 긴 조건 등까지 검증한 것은 아닙니다. 문자열 안 코드의 출현 횟수, 셀 색, 여러 조건의 조합은 별도 문제입니다.
원문 파싱·문자 모형·사이트 CSV 라이브러리 비교는 검증했지만 실제 Excel COUNTIF·자료형 확인·브라우저 UI는 실행하지 않았습니다. 사용 전 대상 Excel에서 수식·포함된 원문·결과를 함께 확인하고 결과가 다르면 Excel 결과를 기준으로 판단하세요.
검토일: 2026-10-18. 합성 예제로 본문 Python 코드·원문 값/길이·제한된 패턴 개수·원본 보존·중복 비교 옵션을 확인했습니다.
AI 보조 작성: AI로 원고와 예제 코드를 작성하고 로컬 실행 결과·공식 문서를 대조했습니다. 실제 고객 자료는 사용하지 않았습니다.