
엑셀 MID·LEFT·RIGHT 함수 완벽 가이드: 기본부터 가변 길이 실무 응용
엑셀 MID LEFT RIGHT 함수는 텍스트에서 원하는 “일부분”을 뽑는 가장 기본 도구입니다. 이 글은 기초 문법부터 가변 길이 추출(FIND/SEARCH), 한글/바이트 이슈, 표·동적배열 연계까지, 현장에서 바로 쓰는 패턴을 단계별로 정리합니다.
빠른 해결(Quick Fix)
기본 문법 한눈에
LEFT(text, [num_chars]): 왼쪽에서 num_chars만큼.RIGHT(text, [num_chars]): 오른쪽에서 num_chars만큼.MID(text, start_num, num_chars): start_num번째 문자부터 num_chars개.- 위치 찾기 도우미:
FIND()=대소문자 구분,SEARCH()=대소문자 무시/와일드카드. - 길이:
LEN()(문자 수). 구버전/특정 로캘에서LENB()는 바이트 수.
자주 쓰는 10가지 패턴
- 전화번호 마지막 4자리:
=RIGHT(A2,4) - 이메일 사용자명( @ 앞 ):
=LEFT(A2, FIND("@",A2)-1) - 이메일 도메인( @ 뒤 ):
=MID(A2, FIND("@",A2)+1, LEN(A2)) - 파일 확장자:
=RIGHT(A2, LEN(A2)-FIND("@",SUBSTITUTE(A2,".","@",LEN(A2)-LEN(SUBSTITUTE(A2,".",""))))) - 앞 3글자:
=LEFT(A2,3) - 뒤 2글자:
=RIGHT(A2,2) - 하이픈 앞 코드:
=LEFT(A2, FIND("-",A2)-1) - 하이픈 뒤 코드:
=MID(A2, FIND("-",A2)+1, LEN(A2)) - N번째 구분자 뒤(예: 2번째 ‘-’ 뒤):
=MID(A2, FIND("@",SUBSTITUTE(A2,"-","@",2))+1, LEN(A2)) - 숫자만/문자만 추출(365):
숫자만:
=TEXTJOIN("",,IFERROR(MID(A2,SEQUENCE(LEN(A2)),1)*1,""))문자만:=TEXTJOIN("",,IF(ISTEXT(MID(A2,SEQUENCE(LEN(A2)),1)),MID(A2,SEQUENCE(LEN(A2)),1),""))
왜 이런 문제가 생기나(개념·원리)
위치 기반 추출의 핵심
문자열 파싱은 결국 시작 위치와 길이 문제입니다. 길이를 모르면 LEN(text) - 시작+1처럼 계산하거나, FIND/SEARCH로 다음 경계를 찾아 차이를 길이로 씁니다.
FIND vs SEARCH, LEN vs LENB
- FIND: 대소문자 구분, 와일드카드 X. SEARCH: 대소문자 무시, 와일드카드 ?,* 지원.
- 현대 엑셀/유니코드 환경에서는 MID/LEFT/RIGHT 중심으로 사용하세요.
MIDB/LEFTB/RIGHTB/LENB는 DBCS(한자/일본어/중국어) 바이트 수를 다루는 구버전 호환용으로, 혼용하면 오히려 헷갈릴 수 있습니다.
실무 예제
샘플 데이터
| 행 | A(원문) | 의도 |
|---|---|---|
| 2 | p1001-SEOUL-XL | SKU 분해 |
| 3 | kim@exceljump.com | 이메일 분해 |
| 4 | 010-1234-5678 | 전화 뒷자리 |
| 5 | Report_v2.1_final.xlsx | 확장자 |
| 6 | [KR] 2025-11-13 / CENTER-02 | 기호 기반 추출 |
1) SKU/코드 분해(고정+가변 혼합)
A2가 p1001-SEOUL-XL일 때:
- 상품코드(하이픈 앞):
=LEFT(A2, FIND("-",A2)-1)→p1001 - 도시(첫~둘째 하이픈 사이):
=MID(A2, FIND("-",A2)+1, FIND("@",SUBSTITUTE(A2,"-","@",2)) - FIND("-",A2) - 1)→SEOUL - 사이즈(마지막 하이픈 뒤):
=MID(A2, FIND("@",SUBSTITUTE(A2,"-","@",LEN(A2)-LEN(SUBSTITUTE(A2,"-",""))))+1, LEN(A2))→XL
2) 이메일 분해
- 아이디:
=LEFT(A3, FIND("@",A3)-1)→kim - 도메인:
=MID(A3, FIND("@",A3)+1, LEN(A3))→exceljump.com - 최상위 도메인(TLD):
=RIGHT(A3, LEN(A3)-FIND(".",A3, FIND("@",A3)))→com
3) 전화번호 / 마지막 4자리
=RIGHT(SUBSTITUTE(A4,"-",""),4) → 5678
하이픈 유무에 상관없이 마지막 4자리만.
4) 파일 확장자 추출(마지막 점 기준)
=RIGHT(A5, LEN(A5)-FIND("@",SUBSTITUTE(A5,".","@", LEN(A5)-LEN(SUBSTITUTE(A5,".",""))))) → xlsx
5) 복합 문자열에서 특정 구간 뽑기
A6 = [KR] 2025-11-13 / CENTER-02
- 국가코드(대괄호 안):
=MID(A6, FIND("[",A6)+1, FIND("]",A6)-FIND("[",A6)-1)→KR - 센터코드(슬래시 뒤 공백 후):
=MID(A6, FIND("/",A6)+2, LEN(A6))→CENTER-02
6) 표(Structured Reference)와 동적배열
범위를 표(Ctrl+T)로 만들고 이름을 tblOrders, 열이 [Email]이라면:
=LEFT(tblOrders[Email], FIND("@", tblOrders[Email]) - 1)
365/2021 이상에서는 TEXTSPLIT로 더 간단히:
=TEXTSPLIT(tblOrders[Email], "@")
스필된 첫 열이 아이디, 두 번째 열이 도메인입니다.
7) LET로 읽기 쉬운 공식 만들기
=LET(
s, A2,
p1, FIND("-", s),
p2, FIND("@", SUBSTITUTE(s,"-","@",2)),
code, LEFT(s, p1-1),
city, MID(s, p1+1, p2-p1-1),
size, MID(s, p2+1, LEN(s)),
code & " | " & city & " | " & size
)
중복 계산을 변수로 치환해 가독성과 속도를 함께 개선합니다.
대체 방법/주의/체크리스트
- 가변 길이는 항상
FIND/SEARCH로 “경계” 위치를 잡고 길이를 계산합니다. - 한글/다국어는 기본적으로
MID/LEFT/RIGHT로 처리하세요. 특수한 DBCS 환경에서만 B함수(MIDB 등)를 고려합니다. - 여분 공백/보이지 않는 공백(CHAR(160))은
TRIM/SUBSTITUTE로 정리 후 파싱하세요. - 숫자 계산이 필요하면 추출 후
VALUE()로 숫자로 변환합니다. - 동일 패턴이 반복되면 표(구조화참조)로 전환하거나 Power Query로 영구 변환을 검토하세요.
Troubleshooting
| 증상 | 원인 | 해결법 |
|---|---|---|
| #VALUE! / #NUM! | FIND 결과 0/음수 길이, 시작 위치 계산 오류 | 경계 문자가 존재하는지 확인, IFERROR로 예외 처리 |
| 이메일 도메인이 잘림 | 마지막 점 위치 계산 누락 | SUBSTITUTE(...,".","@",개수)로 마지막 점을 찾음 |
| 한글 문자 깨짐 | 바이트 함수 혼용 | MID/LEFT/RIGHT만 사용(현대 유니코드 권장) |
| 하이픈 유무가 섞임 | 정규화 미실시 | SUBSTITUTE(text,"-","")로 먼저 통일 |
| 대량 데이터 느림 | 복잡한 중첩 FIND 반복 | LET로 중복계산 제거, Power Query로 전처리 |