엑셀이나 구글 스프레드 시트를 쓰다 보면 반드시 마주치는 질문이 있습니다.
"이 표 어딘가에 있는 값을, 다른 조건을 기준으로 찾아오고싶다."
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은 그 사이에서 유연성과 단순함을 동시에 잡으려 한 함수입니다.
어떤 함수를 쓸지 고민될 때는 "이 상황에서 내가 하려는 탐색이 어떤 방향이고, 결과 위치가 앞으로 바뀔 가능성이 있는가"를 먼저 따져보는 것이 함수 이름을 외우는 것보다 훨씬 오래 남는 판단 기준이 됩니다.