Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기이 글의 목적은 엑셀에서 MIN, MAX 함수가 잘못된 결과를 반환하거나 빈값처럼 보이는 상황을 숫자·텍스트 혼합 문제 관점에서 진단하고, 데이터 정규화·수식·Power Query·서식·VBA 등 실무 전 과정을 통해 재발 방지까지 완결하는 방법을 제시하는 것이다.
MIN, MAX 함수는 숫자형만 계산 대상에 포함하는 것이 원칙이다. 범위 내에 숫자로 보이지만 실제로는 텍스트로 저장된 값이 섞여 있으면 다음과 같은 현상이 발생한다.
주요 원인은 다음과 같다.
| 점검 항목 | 방법 | 판정 기준 |
|---|---|---|
| 셀 정렬 | 홈 탭에서 맞춤 확인 | 기본 설정이면 숫자는 우측 정렬, 텍스트는 좌측 정렬이다. |
| 오류 표시 삼각형 | 셀 좌측 상단 초록 삼각형 확인 | “숫자가 텍스트로 저장됨” 알림이면 텍스트이다. |
| 수식 평가 | =ISTEXT(A2), =ISNUMBER(A2) | TRUE/FALSE로 데이터 유형을 즉시 확인한다. |
| 길이 확인 | =LEN(A2) | 숫자에 불필요한 공백·비가시문자 존재 여부를 추정한다. |
| 문자 코드 | =CODE(MID(A2,ROW($1:$5),1)) 배열 | 비표준 문자 코드 검출에 사용한다. |
보고서를 급히 마감해야 하거나 원본 데이터를 바꾸기 어렵다면 수식으로 숫자만 강제 추출하여 MIN·MAX를 계산한다.
=MIN(IFERROR(--A2:A1000,"")) =MAX(IFERROR(--A2:A1000,"")) 설명: 이중 음수 연산자(--)는 숫자로 변환 가능한 텍스트를 강제 숫자로 바꾼다. 변환 실패 시 빈 문자열로 대체하여 계산에서 제외한다. 동적 배열을 지원하지 않는 버전은 Ctrl+Shift+Enter로 배열 수식 입력을 한다.
--로 변환되지 않는다. 아래 정규화 절차를 추가해야 한다.소수점이 콤마인 지역 데이터(예: "1,25")를 점 소수로 바꾸어 계산한다.
=LET( rng, A2:A1000, arr, SUBSTITUTE(SUBSTITUTE(rng,CHAR(160)," "),",","."), MIN(IFERROR(--TRIM(arr),"")) ) 설명: NBSP(160)를 공백으로 치환하고, 쉼표를 점으로, TRIM으로 여백 제거 후 숫자 강제 변환한다.
=LET( rng, A2:A1000, s1, SUBSTITUTE(rng,"kg",""), s2, SUBSTITUTE(s1,"m",""), s3, SUBSTITUTE(SUBSTITUTE(s2,UNICHAR(8722),"-"),CHAR(160)," "), clean, TRIM(CLEAN(s3)), MIN(IFERROR(--clean,"")) ) 설명: CLEAN으로 제어문자 제거, UNICHAR(8722)로 유니코드 마이너스(−)를 표준 하이픈으로 치환한다.
=LET( rng, A2:A1000, parsed, NUMBERVALUE(rng, ".", ","), /* 소수구분, 천단위 구분 */ MIN(IFERROR(parsed,"")) ) 설명: NUMBERVALUE는 문자열 숫자를 지정한 구분기호 체계로 해석한다. 국제 혼합 데이터 정리 시 안전하다.
근본 해결은 원본을 숫자형으로 통일하는 것이다. 다음 단계별로 실행한다.
=TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(A2,CHAR(160)," "),UNICHAR(8722),"-"))) =LET(t,TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," "))), t1,SUBSTITUTE(SUBSTITUTE(t,"kg",""),"m",""), TRIM(t1)) 쉼표 소수 데이터를 점 소수로 바꿔야 하는 경우 다음을 적용한다.
다음 수식으로 하이픈과 마이너스를 표준화한다.
=SUBSTITUTE(SUBSTITUTE(A2,UNICHAR(8722),"-"),UNICHAR(8211),"-") 이후 곱하기 1 또는 VALUE로 숫자 변환한다.
원본 정리가 끝났더라도 향후 유입 데이터가 불규칙하면 다시 문제가 생긴다. 다음 패턴으로 범위를 감싸 예외를 방지한다.
=LET( rng, A2:A100000, txt, TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(rng,CHAR(160)," "),UNICHAR(8722),"-"))), val, IFERROR(NUMBERVALUE(txt,".",","),IFERROR(--txt,"")), MIN(IF(val<>"",val)) ) =LET( rng, A2:A100000, txt, TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(rng,CHAR(160)," "),UNICHAR(8722),"-"))), val, IFERROR(NUMBERVALUE(txt,".",","),IFERROR(--txt,"")), MAX(IF(val<>"",val)) ) 설명: NUMBERVALUE 우선, 실패 시 -- 강제, 그래도 실패하면 제외한다.
음수 제외, 0 초과 등 조건이 있으면 FILTER를 결합한다.
=LET( rng, A2:A100000, v, IFERROR(--rng,""), MIN(FILTER(v, v<>"" * v>0)) ) 수십만 행 이상, 주기적 갱신, 여러 파일 병합에는 Power Query가 적합하다.
필요 시 사용자 지정 열에서 정규식 유사 치환을 단계로 기록한다.
// Power Query M 예시 = Table.TransformColumns( Source, { {"측정값", each Number.From( Text.Replace( Text.Replace( Text.Replace(Text.Clean(_), Character.FromNumber(160), " "), "kg","" ), "−","-" ) ), type number } } ) 데이터 > 데이터 도구 > 데이터 유효성 검사 허용: 정수 또는 소수 데이터: 크거나 같음 최소: 0 수식 사용: =ISTEXT(A2) 서식: 채우기 색 연한 노랑 반복 작업이 많다면 VBA로 텍스트 숫자 정규화 후 숫자로 변환한다.
Sub NormalizeNumbers() Dim rng As Range, c As Range On Error Resume Next Set rng = Application.Selection On Error GoTo 0 If rng Is Nothing Then Exit Sub For Each c In rng.Cells Dim s As String s = CStr(c.Value) s = WorksheetFunction.Clean(s) s = Replace(s, Chr(160), " ") s = Replace(s, "−", "-") ' U+2212 s = Replace(s, "kg", "") s = Replace(s, "m", "") s = Trim(s) If IsNumeric(s) Then c.Value = CDbl(s) Else ' 로캘 혼합 처리 s = Replace(s, ".", "#") s = Replace(s, ",", ".") s = Replace(s, "#", "") If IsNumeric(s) Then c.Value = CDbl(s) End If Next c End Sub | 사례 | 원인 | 해결 절차 |
|---|---|---|
| 웹에서 복사한 수치가 MIN에 미반영 | NBSP, 유니코드 마이너스 | SUBSTITUTE(CHAR(160)," "), UNICHAR(8722)→"-", 곱하기 1이다. |
| 유럽형 소수 “1,25” 혼입 | 로캘 불일치 | NUMBERVALUE(텍스트,".",",")로 파싱 후 값 붙여넣기이다. |
| 단위 포함 “15 kg” | 숫자+문자 혼합 | SUBSTITUTE로 단위 제거, TRIM·CLEAN 후 -- 변환이다. |
| 정렬 시 값이 두 묶음으로 분리 | 텍스트 숫자 존재 | 텍스트 나누기 즉시 마침 또는 곱하기 1로 일괄 변환이다. |
| MAX가 너무 작게 계산 | 큰 값이 텍스트로 제외 | 예외 무시 패턴으로 재계산 후 원본을 숫자로 통일이다. |
SUM은 텍스트를 숫자로 간주하지 않지만, 일부 상황에서 범위 참조와 자동 변환의 영향으로 기대와 다른 결과가 나올 수 있다. 반면 MIN·MAX는 텍스트를 값으로 포함하지 않기 때문에 숫자로 보이는 텍스트가 섞이면 극단값이 제외되어 비정상으로 보인다. 텍스트 숫자를 숫자형으로 변환하면 해결된다.
서식은 표시만 바꾼다. 값 유형은 ISTEXT, ISNUMBER로 확인해야 한다. 곱하기 1, 텍스트 나누기, NUMBERVALUE 등으로 실제 값을 숫자로 변환해야 한다.
CSV는 형식을 저장하지 않는다. 가져오기 마법사나 Power Query에서 형식을 지정하거나, 열기 직후 텍스트 나누기로 강제 변환 절차를 포함한다.
길이(LEN)로 음수 값 길이를 비교하거나, CODE/MID 배열로 각 문자의 코드값을 확인한다. 하이픈(-)은 45, 유니코드 마이너스는 8722이다.
NUMBERVALUE를 우선 사용하고 실패 시 강제 변환으로 폴백하는 LET 패턴이 안전하다. 본문 5.1 수식을 사용한다.