
엑셀 소수점 분리: 정수부·소수부 따로 표시하는 6가지 실무 레시피
엑셀 소수점 분리가 필요할 때, 가장 빠른 방법부터 구버전 호환·지역(소수점 기호 . 또는 ,) 호환까지 한 번에 정리합니다. 정수부/소수부를 숫자로 분리하거나, 소수부만 텍스트로 꺼내 2자리·N자리로 고정하는 공식, 표(구조화 참조) 자동 확장, 빈 셀·음수·오류까지 안전하게 다루는 팁을 담았습니다.
빠른 해결(Quick Fix)
① 정수부/소수부 숫자 분리 (Microsoft 365/2021 이상)
- 정수부(양수·음수 안전):
=TRUNC(A2,0) - 소수부(0 ≤ 값 < 1):
=MOD(A2,1) - 소수부만 텍스트(자릿수 보존형):
=TEXTAFTER(TEXT(A2,"0.################"), ".")
설명: 숫자를 텍스트로 바꿔 자릿수를 보존하고, 소수점 뒤만 추출합니다.
② 고정 자릿수 소수부(예: 2자리 “45” 형태)
=TEXT(ROUND(MOD(A2,1),2)*100,"00")
소수부를 100배(두 자리)로 변환해 0으로 채우고 텍스트로 반환합니다. 세 자리는 *1000,"000"처럼 확장합니다.
③ 구버전(2019 이하) 대체식
- 소수부 텍스트(지역 자동 인식 x):
=RIGHT(TEXT(A2,"0.############"), LEN(TEXT(A2,"0.############"))-FIND(".",TEXT(A2,"0.############"))) - 지역(., ,) 호환형(자동 인식):
=LET(d, MID(TEXT(1.1,"0.0"),2,1), RIGHT(TEXT(A2,"0"&d&"############"), LEN(TEXT(A2,"0"&d&"############"))-FIND(d, TEXT(A2,"0"&d&"############"))))
왜 이런 문제가 생기나?(개념·원리)
INT vs TRUNC vs MOD
TRUNC(n,0)은 소수부를 “절삭”(0쪽으로 잘라냄).TRUNC(-1.8,0)=-1INT(n)은 “내림”(−∞ 방향).INT(-1.8)=-2. 음수에서 TRUNC와 차이.MOD(n,1)은 소수부를 0~<1 범위로 반환(음수여도 결과는 0~1).MOD(-1.2,1)=0.8
지역 구분 기호(소수점 . vs ,) 호환
Excel은 Windows/Office 지역 설정에 따라 소수점 기호가 달라집니다. 텍스트 함수로 소수부를 꺼낼 때 “.”를 하드코딩하면 유럽형(,) 환경에서 깨질 수 있습니다. 다음처럼 소수점 기호를 자동 감지해 쓰면 안전합니다:
=LET(d, MID(TEXT(1.1,"0.0"),2,1),
TEXTAFTER(TEXT(A2,"0"&d&"################"), d))
d에 현재 통합문서의 소수점 기호를 검출해 담고, 그 문자를 기준으로 분리합니다.
실무 예제
샘플 데이터
| 항목 | 원본 값(A열) | 설명 |
|---|---|---|
| 양수 | 123.456 | 일반 케이스 |
| 음수 | -78.9 | INT/TRUNC 차이 주의 |
| 정수 | 45 | 소수부 없음 |
| 빈 칸 | 오류 방지 필요 | |
| 문자열 | “12.30” | 텍스트 숫자 |
1) 정수부/소수부 분리 — 숫자 그대로
정수부(B열): =IF(A2="","",TRUNC(A2,0))
소수부(C열): =IF(A2="","",MOD(A2,1))
표시 자리수는 셀 서식(Ctrl+1 → 표시 형식)에서 0.00 같은 사용자 지정으로 조절합니다.
2) 소수부만 텍스트로(자릿수 보존/분석용)
소수부를 텍스트로 뽑으면 “0.3000”처럼 원래 자릿수를 유지해 비교, 라벨, 코드화에 유용합니다.
=IF(A2="","",
TEXTAFTER(TEXT(A2,"0.################"), "."))
정수(45)는 소수점 뒤가 없으므로 빈 문자열을 반환합니다. 필요 시 IF(= "", "00") 같이 기본값을 채우세요.
3) 2·3·N자리 고정 소수부(앞쪽 0 채우기)
두 자리(“05”, “30”):
=IF(A2="","",
TEXT(ROUND(MOD(A2,1),2)*100,"00"))
N자리 일반식: =TEXT(ROUND(MOD(A2,1),N)*10^N, REPT("0",N))
4) TEXTSPLIT으로 한 번에 분해(365/2021+)
=LET(
d, MID(TEXT(1.1,"0.0"),2,1),
SPLIT, TEXTSPLIT(TEXT(A2,"0"&d&"################"), d),
H, INDEX(SPLIT,1), T, IF(COUNTA(SPLIT)=2, INDEX(SPLIT,2), ""),
H & " | " & T)
결과 예: 123 | 456. 배열이므로 옆 셀로 쏟아내려면 TEXTSPLIT(...) 자체를 입력한 뒤 스필된 첫 셀과 두 번째 셀을 각각 참조합니다.
5) 표(Structured Reference)로 자동 확장
데이터를 표(단축키 Ctrl+T)로 변환하고, 열 이름을 [Value]라면:
=LET(d, MID(TEXT(1.1,"0.0"),2,1),
TEXTAFTER(TEXT([@Value],"0"&d&"################"), d))
행이 늘어도 자동으로 범위가 확장됩니다.
6) 보고서 안전장치(IFERROR/빈셀이나 문자 방지)
- 검증 포함:
=IFERROR(IF(A2="","",TEXTAFTER(TEXT(A2,"0.################"),".")),"") - 문자열 숫자 강제 변환:
=VALUE(A2)를 중간에 넣어 “12.30” 같은 텍스트 숫자를 숫자로 바꾼 뒤 처리합니다.
대체 방법/주의/체크리스트
- 음수는
TRUNC와INT가 다릅니다. 절삭은TRUNC, 내림은INT. - 라벨/코드용이면 텍스트로 추출, 계산용이면 숫자로 분리하세요.
- 보고서 일관성을 위해 N자리 고정이 필요하면
TEXT( ... , REPT("0",N))패턴을 쓰세요. - 지역(., ,) 이슈가 있으면
LET(d, MID(TEXT(1.1,"0.0"),2,1), ...)로 소수점 기호를 감지해 쓰면 안전합니다. - 서식만으로는 다른 셀에 소수부를 뽑아낼 수 없습니다. 셀 간 분리는 함수로 처리하세요.
Troubleshooting
| 증상 | 원인 | 해결법 |
|---|---|---|
| 음수에서 정수부가 기대와 다름 | INT 사용(내림) |
TRUNC로 절삭 또는 정책에 맞게 선택 |
| 유럽형(,) PC에서 공식 실패 | 소수점 기호를 “.”로 하드코딩 | LET(d, MID(TEXT(1.1,"0.0"),2,1), ... d ...) 패턴으로 자동 감지 |
| 정수 값에서 빈칸 대신 0 표시 | 기본 반환값 미지정 | IF(= "", "00") 등 기본 문자열 지정 |
| “12.30” 같은 텍스트 숫자 미인식 | 숫자 서식 아님 | VALUE로 숫자 변환 후 처리 |
| 자릿수 통일 안 됨 | 고정 자릿수 서식 미사용 | TEXT(...,REPT("0",N))로 0-padding |
마무리: 관련 글 추천
추가 내부 링크: 엑셀 파일 용량 줄이는 법, 워크시트 단축키