기본 콘텐츠로 건너뛰기

[엑셀]TEXTSPLIT과 TEXTJOIN 원리 — 문자열을 쪼개고 다시 합치는 두 방향

 "서울특별시 강남구 테헤란로 123"이라는 주소 한 줄을 시/구/도로명으로 각각 나눠야 하는 업무를 받았다고 해보자. 예전이라면 LEFT·MID·FIND를 여러 겹 조합해야 했을 이 작업이, 지금은 TEXTSPLIT 한 줄로 끝난다. 그리고 이렇게 쪼갠 조각들을 다시 원하는 형태로 이어 붙이는 반대 방향의 작업에는 TEXTJOIN이 쓰인다. 이 두 함수는 결국 '구분자'라는 하나의 개념을 축으로 서로 반대 방향을 바라보고 있다.

구분자 기반 파싱이라는 개념

"파싱(parsing)"이란 하나의 문자열을 정해진 규칙에 따라 의미 있는 조각들로 나누는 작업을 말한다. 이때 가장 널리 쓰이는 규칙이 '구분자'다. 콤마(,)로 구분된 CSV 파일, 공백으로 구분된 주소, 슬래시(/)로 구분된 날짜 모두 구분자를 기준으로 조각을 나눈다는 동일한 원리를 공유한다. TEXTSPLIT은 바로 이 '구분자를 기준으로 나눈다'는 규칙을 함수 하나로 구현한 것이다.

TEXTSPLIT의 원리

=TEXTSPLIT("서울특별시 강남구 테헤란로 123", " ")

이 수식은 공백(" ")을 구분자로 삼아 원본 텍스트를 조각내고, 그 결과를 앞서 다룬 동적 배열(스필) 방식으로 여러 셀에 자동으로 펼쳐 보여준다. 결과는 "서울특별시", "강남구", "테헤란로", "123" 네 개의 조각으로 나뉜다. 구분자를 콤마나 슬래시처럼 다른 기호로 바꾸면 CSV 데이터나 날짜 문자열을 나누는 데도 똑같은 원리로 응용할 수 있다.

TEXTJOIN — 반대 방향의 작업

=TEXTJOIN(", ", TRUE, B2:B5)

TEXTJOIN은 여러 셀에 흩어진 값들을, 지정한 구분자를 사이사이에 끼워가며 하나의 텍스트로 합친다. 두 번째 인수(TRUE)는 빈 셀을 무시할지 여부를 정하는데, TRUE로 두면 빈 셀은 건너뛰고 값이 있는 셀들만 구분자로 이어붙인다. TEXTSPLIT이 "하나를 여러 개로" 나누는 함수라면, TEXTJOIN은 정확히 그 반대인 "여러 개를 하나로" 합치는 함수다.

구분TEXTSPLITTEXTJOIN
방향하나의 텍스트 → 여러 조각여러 값 → 하나의 텍스트
핵심 개념구분자를 기준으로 자르기구분자를 사이사이에 끼워 넣기
결과 형태동적 배열(스필)로 여러 셀에 펼쳐짐텍스트 하나(셀 하나)

여러 구분자를 동시에 처리하기

주소처럼 구분자가 한 종류가 아닐 때도 있다. "서울-강남구,테헤란로"처럼 하이픈과 콤마가 섞여 있다면, TEXTSPLIT에 구분자를 배열로 함께 넘기면 된다.

=TEXTSPLIT("서울-강남구,테헤란로", {"-",","})

이 수식은 하이픈과 콤마 둘 중 어느 것을 만나도 그 지점에서 텍스트를 자른다. 구분자가 여러 종류라는 것은 결국 "이 기호이거나 저 기호를 만나면 자른다"는 OR 조건과 같은 발상이라, 배열로 여러 구분자를 한 번에 넘길 수 있도록 설계된 것이다.

자주 하는 실수

TEXTSPLIT은 스필로 결과가 펼쳐지므로, 결과가 채워질 자리에 이미 다른 값이 있으면 앞서 스필 편에서 다룬 #SPILL! 오류를 그대로 만날 수 있다. TEXTJOIN은 반대로, 구분자를 빈 문자열("")로 지정하면 아무 구분 없이 값들이 그냥 붙어버리므로, 원하는 형태가 맞는지 결과를 항상 확인하는 습관이 필요하다.

Q. TEXTSPLIT은 몇 개 버전부터 쓸 수 있나요?

TEXTSPLIT과 TEXTJOIN 모두 Microsoft 365 버전에서 사용 가능하며, TEXTJOIN은 엑셀 2019부터, TEXTSPLIT은 동적 배열과 함께 더 최근에 추가되었다.

Q. 줄바꿈 기준으로도 나눌 수 있나요?

가능하다. 구분자 자리에 줄바꿈 문자(CHAR(10))를 넣으면 한 셀 안에 여러 줄로 입력된 텍스트도 줄 단위로 쪼갤 수 있다.

Q. 나눈 결과를 다시 원래대로 합치면 원본과 똑같아지나요?

구분자를 동일하게 맞춰서 TEXTJOIN으로 합치면 대부분 원본과 같아지지만, 원본에 연속된 구분자(예: 공백 두 칸)가 있었다면 TEXTSPLIT이 이를 어떻게 처리했는지에 따라 완전히 같지 않을 수도 있다.

마무리

TEXTSPLIT과 TEXTJOIN은 '구분자'라는 하나의 개념을 두고 서로 반대 방향으로 움직이는 한 쌍의 함수다. 다음 글에서는 문자열이 아니라 날짜를 다루는 이야기로 넘어가, 엑셀에서 날짜가 실제로는 하나의 숫자로 저장되어 있다는 시리얼 넘버 원리를 살펴본다.

이 블로그의 인기 게시물

[엑셀]엑셀 날짜는 사실 숫자다 — 1900년부터 세어온 일련번호의 정체

 날짜가 적힌 셀에 그냥 1을 더하면 무슨 일이 벌어질까? 신기하게도 결과는 정확히 '다음 날 날짜'가 된다. 문자처럼 보이는 날짜에 어떻게 숫자를 더했는데 날짜가 하루 늘어날 수 있을까. 답은 간단하다. 엑셀에서 날짜는 애초에 문자가 아니라 숫자이기 때문이다. 날짜가 숫자로 저장된다는 사실 확인하기 날짜가 입력된 셀의 서식을 '일반'으로 바꿔보면 그 정체가 바로 드러난다. 2026-01-15라고 표시되던 셀이 갑자기 46037 같은 숫자로 바뀐다. 이 숫자가 바로 엑셀이 내부적으로 이 날짜를 저장하고 있는 실제 값, 즉 시리얼 넘버(일련번호)다. 화면에 "2026-01-15"라고 보이는 것은 앞서 TEXT 함수 편에서 다룬 것처럼, 이 숫자 위에 날짜 서식이라는 표시 규칙이 덧씌워진 결과일 뿐이다. 1900년을 기준으로 세는 시리얼 넘버 시스템 엑셀은(윈도우 버전 기준) 1900년 1월 1일을 시리얼 넘버 1로 정하고, 그날부터 하루가 지날 때마다 숫자를 1씩 늘려가는 방식으로 날짜를 표현한다. 46037이라는 숫자는 곧 "1900년 1월 1일로부터 46,037번째 되는 날"이라는 뜻이다. 날짜에 숫자를 더하거나 빼는 계산이 자연스럽게 되는 이유가 바로 여기에 있다. 날짜끼리의 덧셈·뺄셈은 사실 이 일련번호끼리의 평범한 산술 연산일 뿐이다. =DATE(2026,1,15) + 30 이 수식은 2026년 1월 15일의 시리얼 넘버에 30을 더한 것과 같으므로, 결과는 정확히 30일 뒤의 날짜인 2026년 2월 14일이 된다. 시간은 어떻게 표현될까 — 소수점 이하가 하루의 몇 분의 몇인지 날짜가 정수로 표현된다면, 시간은 그 정수의 소수점 이하 부분으로 표현된다. 하루 24시간을 1로 놓았을 때, 낮 12시는 하루의 정확히 절반이므로 0.5가 된다. 예를 들어 46037.5라는 값은 "2026년 1월 15일 낮 12시"를 의미한다. 날짜와 시간이 함께 입력된 셀을 다룰 때 정수 부...

[엑셀]배열수식이란 무엇인가 — 하나의 셀에 여러 계산이 담기는 원리 스칼라 연산과 배열 연산의 차이

 셀 하나를 클릭했는데 그 안에서 수백 번의 계산이 동시에 일어나고 있다면 믿어지는가. 앞선 글에서 다룬 SUMPRODUCT나 SUMIF의 조건 판정이 바로 그런 경우였다. 겉으로는 셀 하나에 결과값 하나만 보이지만, 그 이면에서는 범위 전체를 대상으로 한 계산이 통째로 진행되고 있었다. 이 글에서는 이 현상의 정체, 즉 배열수식이라는 개념을 원리 차원에서 짚어본다. 스칼라 연산과 배열 연산의 차이 평소 우리가 쓰는 대부분의 수식은 '스칼라 연산'이다. =A2+B2 처럼 셀 하나와 셀 하나를 계산해서 값 하나를 내놓는 방식이다. 입력도 하나, 출력도 하나다. 반면 '배열 연산'은 여러 개의 값을 하나의 묶음(배열)으로 취급해서 한꺼번에 계산한다. =A2:A10+B2:B10 이라고 쓰면, 이는 A2+B2, A3+B3, ... A10+B10이라는 아홉 번의 계산을 동시에 수행하라는 뜻이 된다. 입력은 여러 개(범위 대 범위)지만, 이 계산 결과를 최종적으로 어떻게 압축해서 보여줄지는 그 다음 문제다. 결과가 여러 개인데 셀은 하나뿐이라면? 여기서 배열수식의 진짜 개념이 드러난다. 아홉 번의 계산 결과 아홉 개의 값이 나왔는데, 이를 담을 셀이 하나뿐이라면 엑셀은 어떻게 해야 할까. 과거 방식에서는 이 아홉 개의 값을 SUM이나 COUNT 같은 함수로 다시 하나로 압축해서 보여주는 방식을 썼다. 예를 들어 {=SUM(A2:A10*B2:B10)} 이라는 수식은 A와 B 각 행을 곱한 아홉 개의 결과를 배열로 만든 뒤, 그 아홉 개를 SUM으로 다시 하나로 합쳐 셀 하나에 담아내는 구조다. 여기서 중괄호 {} 는 사용자가 직접 입력하는 기호가 아니라, 예전 엑셀에서 Ctrl+Shift+Enter를 눌러 "이건 배열수식입니다"라고 선언했을 때 엑셀이 자동으로 붙여주던 표시였다. 왜 예전에는 이런 특별한 입력이 필요했나 일반 함수는 셀 하나 대 셀 하나로 계산하도록 설계되어 있었기 때문에, 여러 값을 배열째로 넘기려면 엑셀에게...

[엑셀]COUNTIF/COUNTIFS — 카운팅과 조건 매칭의 관계 SUMIF와의 구조적 유사성과 차이

 출석부를 관리하다 보면 "결석이 3회 이상인 학생 수"나 "이번 달 지각 횟수"처럼 특정 조건을 만족하는 항목이 '몇 개'인지 세야 하는 순간이 자주 온다. 앞선 글에서 다룬 SUMIF가 조건에 맞는 값들을 '더하는' 함수였다면, 이번에 다룰 COUNTIF는 조건에 맞는 항목이 '몇 개'인지를 세는 함수다. 이름도 구조도 SUMIF와 매우 닮았지만, 자세히 들여다보면 미묘하지만 중요한 차이가 하나 숨어 있다. COUNTIF의 기본 구조 =COUNTIF(A2:A100, "결석") COUNTIF는 조건을 검사할 범위와 조건, 이렇게 두 개의 인수만 받는다. A2:A100 범위에서 "결석"이라는 값과 일치하는 셀이 몇 개인지를 세어 그 개수를 반환한다. SUMIF와 COUNTIF의 구조적 유사성 지난 글에서 SUMIF의 원리를 "조건 범위를 참/거짓 배열로 바꾸고, 그 배열을 합계 범위 위에 겹쳐서 참인 위치만 더한다"고 설명했다. COUNTIF도 앞부분까지는 완전히 동일하다. 조건 범위를 검사해서 참/거짓 배열을 만드는 과정까지는 똑같다. 차이는 그다음이다. SUMIF는 이 배열을 다른 범위(합계 범위) 에 겹쳐서 값을 더하지만, COUNTIF는 겹칠 다른 범위 자체가 필요 없다. 그냥 참/거짓 배열에서 TRUE의 개수만 세면 끝나기 때문이다. 즉 "무엇을 더할지"를 지정할 필요가 없으므로 인수가 하나 줄어드는 것이다. 이렇게 보면 COUNTIF(범위, 조건)는 개념적으로 SUMIF(범위, 조건, 참거짓배열자체) 와 비슷한 일을 하는 셈이다. COUNTIFS — 여러 조건의 동시 만족 =COUNTIFS(A2:A100, "결석", B2:B100, ">=3") COUNTIFS 역시 SUMIFS와 동일한 방식으로 확장된다. 각 조건 범위마다 참/거짓 배열을 만들고, 이 배열들을...