Home MS 엑셀 강좌[엑셀 실무 팁] TEXTSPLIT · TEXTBEFORE · TEXTAFTER 함수로 ‘텍스트 나누기’ 마법사 없이 지저분한 주소·상품코드·로그 데이터 1초 자동 분리하는 법

[엑셀 실무 팁] TEXTSPLIT · TEXTBEFORE · TEXTAFTER 함수로 ‘텍스트 나누기’ 마법사 없이 지저분한 주소·상품코드·로그 데이터 1초 자동 분리하는 법

by 김형백

[오늘의 엑셀 실무 팁 30초 핵심 요약]

  • 구형 방식의 한계 극복: LEFT, MID, RIGHT에 FIND나 LEN 함수를 겹겹이 중첩하던 복잡한 텍스트 추출 공식과, 원본이 바뀔 때마다 수동으로 다시 실행해야 하는 [데이터] → [텍스트 나누기] 마법사를 완벽히 대체하는 최신 동적 텍스트 함수 3총사입니다.
  • 직관적인 전후방 추출 공식: 특정 구분자(‘-’, ‘/’, 공백 등)의 앞쪽 텍스트만 뽑을 때는 =TEXTBEFORE(셀, 구분자, [순번]), 뒤쪽 텍스트만 뽑을 때는 =TEXTAFTER(셀, 구분자, [순번])를 쓰며, 순번에 음수(-1)를 넣으면 뒤에서부터 가장 마지막 구분자를 기준으로 1초 만에 잘라냅니다.
  • 2차원 배열 자동 분할의 끝판왕: 한 셀에 쉼표(,)와 줄바꿈(CHAR(10))으로 뭉쳐 있는 쇼핑몰 주문 옵션이나 로그 데이터를 =TEXTSPLIT(셀, 열구분자, 행구분자, TRUE) 수식 하나로 가로·세로 2차원 표 형태로 즉시 펼쳐낼 수 있습니다.

엑셀 실무 현장에서 가장 빈번하게 마주치는 골칫거리 중 하나는 ‘한 셀 안에 여러 정보가 뒤섞여 있는 지저분한 텍스트 데이터’를 정리하는 일입니다. 예를 들어 ERP나 쇼핑몰 관리자 페이지에서 내려받은 주문 내역 엑셀 파일에 [서울특별시 강남구 테헤란로 152 (역삼동, 강남파이낸스센터)]처럼 시/도, 시/군/구, 도로명, 상세주소가 통째로 들어 있거나, [PRD-2026-KOR-BLK-XL]처럼 하이픈(-)이 서너 개씩 들어간 상품코드를 부서별·색상별·사이즈별로 쪼개야 하는 상황이 대표적입니다.

지금까지 많은 직장인은 이런 데이터를 받으면 상단 리본 메뉴의 [데이터] → [텍스트 나누기] 마법사를 실행하거나, 과거 엑셀 기초 강좌에서 배운 LEFT, MID, RIGHT 함수 안에 FIND와 SUBSTITUTE 함수를 3중, 4중으로 중첩한 암호 같은 수식을 입력하곤 했습니다. 하지만 [텍스트 나누기]는 원본 데이터가 수정되거나 행이 추가될 때 자동으로 갱신되지 않는 일회성 수동 작업이고, MID+FIND 중첩 수식은 구분자 개수가 늘어날수록 수식 길이가 두 줄을 넘어가며 유지보수가 불가능해진다는 치명적인 단점이 있습니다.

오늘 엑셀 실무 팁에서는 Microsoft 365 및 최신 엑셀 환경에서 텍스트 전처리 속도를 10배 이상 단축해 주는 TEXTSPLIT, TEXTBEFORE, TEXTAFTER 함수 3총사의 작동 원리, 6가지 핵심 인수 설정법, 실무 예제 수식 블록 4선, 그리고 실무자들이 가장 많이 겪는 #N/A · #VALUE! · #SPILL! 오류 해결법까지 완벽하게 마스터해 보겠습니다.


1. 구형 텍스트 분리 방식 vs 신형 동적 텍스트 함수 3총사 완벽 비교

왜 기존에 잘 쓰던 LEFT/MID/RIGHT 조합이나 빠른 채우기(Ctrl + E) 대신 새로운 함수를 배워야 할까요? 가장 큰 이유는 ‘실시간 동적 연동(Dynamic Recalculation)’과 ‘뒤에서부터 찾기(Negative Instance)’ 기능 때문입니다. 과거 엑셀에서 문자열의 맨 마지막 하이픈(-) 뒤에 있는 글자만 뽑으려면 =TRIM(RIGHT(SUBSTITUTE(A2,"-",REPT(" ",100)),100))이라는 기괴한 공식을 외워야 했지만, 이제는 =TEXTAFTER(A2, "-", -1) 단 한 줄이면 끝납니다.

비교 기준 [데이터] → 텍스트 나누기 / 빠른 채우기(Ctrl+E) 구형 함수 조합 (LEFT · MID · RIGHT + FIND) 신형 텍스트 함수 (TEXTBEFORE · TEXTAFTER · TEXTSPLIT)
원본 수정 시 자동 갱신 불가 (수동으로 처음부터 다시 실행해야 함) 자동 갱신 가능 실시간 100% 자동 갱신 (동적 배열 스필 지원)
수식 난이도 및 가독성 수식 없음 (단, 작업 이력 추적 불가) 매우 복잡 (2번째·3번째 구분자 추출 시 중첩 지옥) 매우 직관적 (순번 인수 2, 3, -1만 입력하면 끝)
뒤에서 N번째 기준 추출 글자 수가 다르면 패턴 인식 실패 빈번 SUBSTITUTE + REPT + RIGHT 편법 수식 필수 instance_num에 -1, -2 입력으로 즉시 해결
다중 구분자 동시 처리 체크박스로 일부 가능하나 2차원 행 분할 불가 SUBSTITUTE를 구분자 개수만큼 중첩해야 함 배열 상수 {"-","/","_"} 입력으로 한 번에 분리
행(Row) 방향 세로 쪼개기 불가 (가로 열 방향으로만 분할됨) 불가 (파워쿼리 진입 필요) TEXTSPLIT의 row_delimiter 인수로 세로 분할

2. TEXTBEFORE · TEXTAFTER · TEXTSPLIT 함수 구문 및 6대 핵심 인수 해부

세 함수는 모두 ‘원본 텍스트(text)’와 ‘구분 기호(delimiter)’라는 두 가지 필수 인수로 시작하며, 그 뒤에 실무 완성도를 높여주는 선택 인수들이 배치되어 있습니다. 각 인수의 정확한 역할을 표로 먼저 정리합니다.

함수 및 인수명 필수/선택 인수 역할 및 작동 원리 실무 추천 설정값 예시
text 필수 분리하거나 추출할 원본 텍스트가 들어 있는 셀 참조 A2
delimiter / col_delimiter 필수 (TEXTSPLIT은 행/열 중 택1 가능) 기준이 되는 구분 문자. 여러 개의 구분자를 동시에 지정할 때는 중괄호 배열 상수 사용 "-", " ", 또는 다중 기호 {"-", "/", ","}
instance_num (BEFORE/AFTER 전용) 선택 (기본값 1) 몇 번째 등장하는 구분자를 기준으로 삼을지 지정. 양수(1, 2)는 앞에서부터, 음수(-1, -2)는 뒤에서부터 검색 첫 번째 기준: 1 / 맨 마지막 기준: -1
row_delimiter (TEXTSPLIT 전용) 선택 텍스트를 아래쪽 행(Row) 방향(세로)으로 쪼갤 기준 구분자 줄바꿈 기호: CHAR(10) 또는 세미콜론 ";"
ignore_empty (TEXTSPLIT 전용) 선택 (기본값 FALSE) 구분자가 연속으로 두 번 나올 때(예: 공백 두 칸 " ") 빈 셀을 생성할지 무시할지 결정 실무에서는 무조건 TRUE (빈 셀 무시) 권장
if_not_found / pad_with 선택 구분자를 찾지 못했거나 2차원 분할 시 데이터가 비어 있는 칸에 #N/A 오류 대신 표시할 값 "" (빈칸) 또는 원본 그대로 반환 A2

2-1. TEXTBEFORE와 TEXTAFTER의 핵심 감각 익히기

이름 그대로 영어 전치사 BEFORE(~의 앞)와 AFTER(~의 뒤)만 기억하시면 됩니다. 예를 들어 A2 셀에 soongin@gmail.com이라는 이메일 주소가 들어 있을 때:

  • 아이디(@ 앞부분) 추출: =TEXTBEFORE(A2, "@") → 결과: soongin
  • 도메인(@ 뒷부분) 추출: =TEXTAFTER(A2, "@") → 결과: gmail.com

2-2. 왜 두 함수를 중첩하면 ‘가운데 낀 텍스트’도 1초 만에 뽑힐까?

만약 A2 셀에 [인사팀] 김형백 수석 (내선 304)라는 문자열이 있고, 여기서 부서명과 괄호를 뺀 이름과 직급(김형백 수석)만 정확히 발라내고 싶다면 어떻게 할까요? 구형 MID 함수로 글자 수를 셀 필요 없이, 먼저 대괄호 "] " 뒷부분을 가져온 다음 그 결과에서 여는 괄호 " (" 앞부분만 잘라내면 됩니다.

수식: =TEXTBEFORE(TEXTAFTER(A2, "] "), " (") → 결과: 김형백 수석. 이처럼 안쪽에서 바깥쪽으로 껍질을 벗겨내듯 결합하면 어떤 형태의 문자열이든 자유자재로 추출할 수 있습니다.


3. [실무 예제 수식 블록 4선] 복사해서 바로 쓰는 텍스트 정제 마스터 공식

현업에서 가장 자주 마주치는 4가지 난감한 데이터 정제 상황을 해결하는 검증된 수식 블록입니다.

3-1. [실무 예제 1] 길이가 제각각인 대한민국 주소에서 ‘시/도’, ‘시/군/구’, ‘나머지 상세주소’ 3단 분리하기

A2 셀에 경기도 성남시 분당구 판교역로 235 에이치스퀘어 N동이 들어 있을 때, 공백(" ")을 기준으로 행정구역을 정확히 나누는 공식입니다.

// 1) [B2 셀] 시/도 추출 (첫 번째 공백 앞부분)
=TEXTBEFORE(A2, " ", 1)
// 결과: 경기도

// 2) [C2 셀] 시/군/구 추출 (첫 번째 공백 뒤에서부터 두 번째 공백 앞까지 추출)
=TEXTBEFORE(TEXTAFTER(A2, " ", 1), " ", 1)
// 결과: 성남시

// 3) [D2 셀] 두 번째 공백 뒤의 나머지 도로명·상세주소 전체 추출
=TEXTAFTER(A2, " ", 2)
// 결과: 분당구 판교역로 235 에이치스퀘어 N동

3-2. [실무 예제 2] 하이픈(-) 개수가 들쭉날쭉한 파일명·상품코드에서 ‘맨 마지막 버전/사이즈’만 뽑아내기

어떤 상품코드는 SHIRT-BLK-100(하이픈 2개)이고, 어떤 코드는 OUTER-2026-FW-NVY-105(하이픈 4개)일 때, 하이픈 개수에 상관없이 무조건 맨 오른쪽 끝에 있는 사이즈 숫자와 그 앞의 상품 마스터 코드를 분리하는 공식입니다.

// 1) 뒤에서 첫 번째(-1) 하이픈 뒤의 최종 사이즈만 추출
=TEXTAFTER(A2, "-", -1)
// 결과: 100 또는 105

// 2) 맨 마지막 사이즈만 제외한 앞쪽 마스터 코드 전체 추출
=TEXTBEFORE(A2, "-", -1)
// 결과: SHIRT-BLK 또는 OUTER-2026-FW-NVY

3-3. [실무 예제 3] 한 셀에 쉼표(,)와 슬래시(/), 공백이 뒤섞인 참석자 명단을 ‘세로 1열 목록’으로 깔끔하게 펼치기

설문조사나 메신저에서 복사해 온 명단이 A2 셀 하나에 김철수, 이영희 / 박민수, 최지우 / 정우성처럼 구분 기호도 제각각이고 띄어쓰기도 불규칙하게 뭉쳐 있을 때, 이를 아래쪽 행(Row) 방향으로 1명씩 깨끗하게 정렬하는 공식입니다.

// 2번째 인수(열 구분자)는 비워두고, 3번째 인수(행 구분자)에 다중 기호 배열 상수를 지정한 뒤 TRIM으로 앞뒤 공백 제거
=TRIM(TEXTSPLIT(A2, , {",", "/"}, TRUE))
// 결과: 아래쪽 행으로 김철수 / 이영희 / 박민수 / 최지우 / 정우성 5개 행이 자동 생성(Spill)됨

3-4. [실무 예제 4] 한 셀 안에 줄바꿈(Alt+Enter)으로 입력된 쇼핑몰 주문 옵션을 2차원 표(품목 | 수량 | 단가)로 변환하기

A2 셀 안에 아래와 같이 세 줄짜리 텍스트가 들어 있다고 가정해 봅시다.
무선마우스:2개:35000원 (줄바꿈)
기계식키보드:1개:89000원 (줄바꿈)
모니터암:3개:42000원
이 단일 셀을 콜론(:) 기준으로 열을 나누고, 줄바꿈(CHAR(10)) 기준으로 행을 나누어 즉시 3행 3열의 표로 쪼개는 마법의 공식입니다.

// 열 구분자에 ":", 행 구분자에 줄바꿈 문자 CHAR(10) 지정, 빈 줄 무시(TRUE), 누락 값 빈칸("") 처리
=TEXTSPLIT(A2, ":", CHAR(10), TRUE, 0, "")

4. 실무자를 괴롭히는 3대 오류(#N/A, #VALUE!, #SPILL!) 원인과 1초 해결법

텍스트 함수 3총사를 실무 데이터에 적용할 때 가장 자주 발생하는 오류 메시지 3가지와 완벽한 방어 공식입니다.

4-1. #N/A 오류: “찾으려는 구분 기호가 없는 셀이 섞여 있어요!”

1,000개의 행에 =TEXTBEFORE(A2, "-")를 복사했는데 중간중간 #N/A 오류가 뜬다면, 해당 행의 원본 데이터에 하이픈(-)이 아예 없거나 요청한 순번(예: 3번째 하이픈)만큼 구분자가 존재하지 않기 때문입니다. 이때 함수 바깥에 IFERROR를 씌울 필요 없이, TEXTBEFORE나 TEXTAFTER의 6번째 인수(if_not_found)에 원본 셀(A2)이나 빈칸("")을 직접 적어주면 깔끔하게 해결됩니다.
→ 방어 수식: =TEXTBEFORE(A2, "-", 1, 0, 0, A2) (구분자가 없으면 원본 A2 값을 그대로 출력)

4-2. 숫자로 쪼갰는데 합계(SUM)가 0원으로 나오는 현상: ‘텍스트형 숫자’를 연산 가능한 숫자로 바꾸는 -- (이중 음수 부호)

TEXTSPLIT, TEXTBEFORE, TEXTAFTER가 반환하는 결과물은 눈에는 35000이라는 숫자로 보여도 데이터 형식은 무조건 ‘문자열(Text)’입니다. 따라서 이 결과 범위를 그대로 =SUM(B2:D2)에 넣으면 엑셀은 문자로 인식해 합계를 0으로 계산합니다. 추출된 숫자를 즉시 사칙연산과 합계가 가능한 진짜 숫자(Number)로 바꾸려면 수식 맨 앞에 이중 마이너스 기호(--)를 붙이거나 VALUE 함수로 감싸주면 됩니다.
→ 변환 수식: =--TEXTSPLIT(A2, ",")

4-3. #SPILL! (분산 오류) 및 엑셀 표(Ctrl+T) 내부에서 TEXTSPLIT 사용 시 주의점

TEXTSPLIT은 결과가 여러 개의 셀로 자동 확장(Spill)되는 동적 배열 함수입니다. 만약 결과가 펼쳐져야 할 오른쪽이나 아래쪽 셀에 다른 글자나 공백이 들어 있으면 #SPILL! 오류가 발생하므로 주변 셀을 비워주어야 합니다. 또한 엑셀의 정식 ‘표(Table, Ctrl+T)’ 기능 내부 셀에는 다중 셀로 확장되는 동적 배열 수식을 직접 입력할 수 없으므로, 표 기능 안에서는 단일 값을 반환하는 TEXTBEFORE / TEXTAFTER나 INDEX(TEXTSPLIT(...), 1, 2) 형태로 특정 열만 지정하여 사용해야 합니다.


5. 자주 묻는 질문 (FAQ Top 4) 및 오늘 바로 실행할 체크리스트

Q1. 제 엑셀에서 =TEXTSPLIT을 치면 #NAME? 오류가 뜨는데 왜 그런가요?

A. 해당 함수들은 Microsoft 365(구 오피스 365), Excel 2024 이후 버전, 그리고 무료 웹용 엑셀(Excel for the Web)에서 지원되는 최신 함수입니다. 만약 구형 설치형 버전(Excel 2016, 2019, 2021)을 사용 중이시라면 #NAME? 오류가 표시됩니다. 사내 PC가 구형 버전이라면 office.com 무료 웹 엑셀에서 파일을 열어 작업하시거나, 본 블로그의 이전 강좌인 [파워 쿼리(Power Query) 열 분할] 기능을 활용하시면 동일하게 자동화할 수 있습니다.

Q2. 영문 코드(예: 100x200X300)를 나눌 때 소문자 x와 대문자 X를 구분하지 않고 한 번에 나눌 수 있나요?

A. 네, match_mode 인수에 1을 입력하면 대소문자 구분을 해제(Case-Insensitive)합니다. 예를 들어 =TEXTSPLIT(A2, "x", , TRUE, 1)이라고 입력하면 소문자 x든 대문자 X든 모두 동일한 구분자로 인식하여 100, 200, 300으로 깔끔하게 쪼개줍니다.

Q3. TEXTSPLIT으로 쪼갠 결과 중 3번째 항목 딱 하나만 가져오고 싶을 때는 어떻게 하나요?

A. INDEX 함수나 CHOOSECOLS 함수로 감싸주시면 됩니다. 예를 들어 =INDEX(TEXTSPLIT(A2, "-"), 3)이라고 쓰면 전체 배열을 옆 셀로 펼치지 않고 오직 3번째 조각만 현재 셀 하나에 깔끔하게 반환합니다.

Q4. 반대로 여러 셀로 쪼개진 텍스트를 다시 하나의 셀로 합칠 때는 어떤 함수를 쓰나요?

A. TEXTSPLIT의 완벽한 짝꿍 함수인 TEXTJOIN을 사용하시면 됩니다. =TEXTJOIN("-", TRUE, B2:E2)라고 입력하면 빈 셀은 자동으로 무시하면서 B2부터 E2까지의 값을 하이픈(-)으로 이어 붙여 다시 하나의 문자열로 결합해 줍니다.

[오늘 바로 실행할 엑셀 텍스트 정제 자동화 4단계 체크리스트]

  1. 반복 수작업 파일 찾기: 매주 ERP나 쇼핑몰에서 내려받아 [텍스트 나누기]를 수동으로 돌리던 엑셀 파일을 연다.
  2. 전후방 추출 적용: 첫 번째 구분자 앞은 =TEXTBEFORE(셀, 구분자), 마지막 구분자 뒤는 =TEXTAFTER(셀, 구분자, -1)로 교체한다.
  3. 공백 및 숫자 후처리: 추출된 문자에 불필요한 띄어쓰기가 있다면 TRIM()으로 감싸고, 숫자 계산이 필요하면 앞에 --를 붙인다.
  4. 오류 방어 인수 추가: 구분자가 없는 예외 데이터를 대비해 6번째 인수(if_not_found)에 "" 또는 원본 셀 주소를 넣어 수식을 완성한다.

You may also like

댓글 남기기