기본 콘텐츠로 건너뛰기

엑셀 조회 함수는 결국 하나의 질문에서 시작한다.

 엑셀이나 구글 스프레드 시트를 쓰다 보면 반드시 마주치는 질문이 있습니다.

"이 표 어딘가에 있는 값을, 다른 조건을 기준으로 찾아오고싶다."

VLOOKUP, HLOOKUP, INDEX/MATCH, XLOOKUP은 결국 이 하나의 문제, 즉 조회(Lookup) 문제를 서로 다른 방식으로 풀어낸 도구들입니다. 사용법을 외우기 전에 이 함수들이 공통적으로 풀고 있는 문제가 무엇인지, 그리고 왜 하나가 아니라 여러 개로 나뉘어 발전했는지를 이해하면 어떤 상황에 어떤 함수를 써야 할지 스스로 판단할 수 있게 됩니다.

조회(Lookup)라는 문제의 본질

표는 본질적으로 행과 열로 이루어진 2차원 구조입니다. 조회 문제란 "어떤 기준 값(key)이 있는 위치를 찾고, 그 위치와 연결된 다른 칸의 값을 가져오는 것"으로 정의할 수 있습니다. 예를 들어 사원번호라는 기준 값으로 그 사람의 부서명을 찾아오는 것이 대표적인 조회 문제입니다.

이 문제를 컴퓨터과학적으로 보면 두 단계로 나뉩니다. 첫째는 탐색(Search) — 기준 값이 어디에 있는지 찾는 단계이고, 둘째는 참조(Reference) — 찾은 위치를 기준으로 원하는 칸의 값을 가져오는 단계입니다. 엑셀의 조회 함수들이 서로 다르게 설계된 이유는 바로 이 탐색 단계를 어떤 방식으로 수행하느냐의 차이 때문입니다.

VLOOKUP의 논리적 구조와 태생적 한계

VLOOKUP은 "Vertical Lookup"의 줄임말로, 세로 방향(열)으로 나열된 표에서 동작하도록 설계되었습니다. 이 함수의 탐색 논리는 단순합니다. 지정한 범위의 가장 왼쪽 열에서 기준 값을 찾고, 그 행을 기준으로 오른쪽으로 몇 번째 열의 값을 가져올지를 숫자로 지정하는 방식입니다.

이 구조에는 이론적으로 두 가지 제약이 내재되어 있습니다. 첫째, 기준 값은 반드시 참조 범위의 가장 왼쪽 열에 있어야 합니다. 탐색 알고리즘 자체가 왼쪽 열만 훑도록 설계되어 있기 때문입니다. 둘째, 결과 열의 위치를 상대적인 열 번호로 지정하기 때문에, 표 중간에 열이 하나라도 추가되거나 삭제되면 참조하는 열 번호가 달라져 수식이 깨질 위험이 있습니다. 이는 VLOOKUP이 "위치 기반 참조"라는 설계 방식을 택한 데서 오는 구조적 특성입니다.

INDEX와 MATCH가 등장한 이유

INDEX/MATCH 조합은 VLOOKUP의 구조적 제약을 풀기 위해 탐색과 참조를 분리한 방식입니다. MATCH 함수는 순수하게 "탐색"만 담당해서 기준 값이 몇 번째 위치에 있는지 숫자로 반환하고, INDEX 함수는 그 위치 번호를 받아 "참조"만 담당해서 원하는 범위에서 해당 위치의 값을 꺼냅니다.

이렇게 역할을 분리하면 기준 값이 표의 왼쪽에 있을 필요가 없어집니다. MATCH는 어느 열에서든 탐색이 가능하고, INDEX는 어느 범위에서든 값을 꺼낼 수 있기 때문입니다. 즉 VLOOKUP이 "탐색 방향이 고정된 하나의 함수"였다면, INDEX/MATCH는 "탐색과 참조라는 두 개의 독립적인 연산을 조합"하는 방식으로 문제를 재설계한 것입니다. 이는 함수를 하나 더 배운다는 개념이 아니라, 문제를 분해해서 접근하는 사고방식의 차이에 가깝습니다.

XLOOKUP은 무엇을 이론적으로 해결했나

XLOOKUP은 비교적 최근에 도입된 함수로, VLOOKUP의 한계와 INDEX/MATCH의 번거로움(두 함수를 조합해야 하는 점)을 동시에 해결하려는 시도로 볼 수 있습니다. XLOOKUP은 탐색 범위와 반환 범위를 각각 독립적으로 지정할 수 있게 설계되어, 기준 값이 왼쪽에 있어야 한다는 VLOOKUP의 제약이 사라졌습니다. 동시에 하나의 함수로 동작하기 때문에 INDEX/MATCH처럼 두 함수를 중첩해서 쓸 필요도 없습니다. 또한 XLOOKUP은 값을 찾지 못했을 때 반환할 기본값을 함수 안에서 직접 지정할 수 있고, 정확히 일치하는 값뿐 아니라 근사값 탐색 방향 (이상/이하 중 가장 가까운 값)까지 옵션으로 제어할 수 있습니다. 이는 탐색이라는 연산 자체를 더 세밀하게 제어하고 싶다는, 조회 함수 발전의 방향성을 보여주는 설계입니다.

정리 — 함수를 고르는 것이 아니라 문제를 분해하는 것

결국 VLOOKUP, INDEX/MATCH, XLOOKUP은 겉으로는 다른 함수처럼 보이지만, "탐색"과 "참조"라는 두 가지 연산을 각기 다른 방식으로 결합한 결과물입니다. VLOOKUP은 이 둘을 하나로 묶어 단순하게 만든 대신 위치 제약을 감수한 함수이고, INDEX/MATCH는 이 둘을 분리해서 유연성을 얻은 대신 복잡도를 감수한 조합이며, XLOOKUP은 그 사이에서 유연성과 단순함을 동시에 잡으려 한 함수입니다.

어떤 함수를 쓸지 고민될 때는 "이 상황에서 내가 하려는 탐색이 어떤 방향이고, 결과 위치가 앞으로 바뀔 가능성이 있는가"를 먼저 따져보는 것이 함수 이름을 외우는 것보다 훨씬 오래 남는 판단 기준이 됩니다.

이 블로그의 인기 게시물

[엑셀]엑셀 날짜는 사실 숫자다 — 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시"를 의미한다. 날짜와 시간이 함께 입력된 셀을 다룰 때 정수 부...

[엑셀]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와 동일한 방식으로 확장된다. 각 조건 범위마다 참/거짓 배열을 만들고, 이 배열들을...

[엑셀]LEFT·RIGHT·MID의 공통점 — 텍스트는 결국 문자들의 배열이다

 "010-1234-5678"이라는 전화번호에서 가운데 네 자리만 뽑아내고 싶을 때, 많은 사람이 LEFT나 RIGHT는 익숙하게 쓰면서도 MID는 어렵게 느낀다. 그런데 이 세 함수는 사실 하나의 동일한 원리 위에서 동작한다. 텍스트를 하나의 덩어리가 아니라, 문자 하나하나가 순서대로 나열된 '배열'로 바라보는 관점이다. 텍스트를 문자 단위 배열로 보는 관점 "엑셀"이라는 두 글자 텍스트는, 배열의 눈으로 보면 1번째 자리에 "엑", 2번째 자리에 "셀"이 들어 있는 구조와 다르지 않다. 앞서 여러 글에서 다룬 배열이 셀들의 모음이었다면, 문자열 함수에서의 배열은 '문자들의 모음'이라는 점만 다를 뿐 "위치를 기준으로 원하는 부분만 골라낸다"는 발상 자체는 동일하다. LEFT·RIGHT·MID가 공유하는 하나의 원리 =LEFT("010-1234-5678", 3) → "010" =RIGHT("010-1234-5678", 4) → "5678" =MID("010-1234-5678", 5, 4) → "1234" 세 함수 모두 "어디서부터, 몇 글자를" 가져올지를 지정한다는 점에서 본질적으로 같은 함수다. LEFT는 항상 1번째 자리부터 시작한다고 고정해둔 것이고, RIGHT는 항상 끝에서부터 거꾸로 센 것이며, MID는 시작 위치를 자유롭게 지정할 수 있도록 일반화한 버전이다. 즉 LEFT와 RIGHT는 MID의 특수한 경우라고 볼 수 있다. MID로 문자 단위 추출을 직접 확인해보기 이 원리를 직접 확인해보는 가장 좋은 방법은 MID로 한 글자씩 뽑아보는 것이다. =MID("엑셀",1,1) → "엑" (1번째 자리 문자 1개) =MID("엑셀",2,1) → ...