찾는 값이 하나가 아닐 때
✔ XLOOKUP + INDEX + MATCH
XLOOKUP을 쓰다 보면 어느 순간 이런 상황을 만납니다.
값은 정확히 찾았습니다.
그런데,
가져와야 할 위치가 고정이 아닙니다.
열이 늘어나거나 순서가 바뀝니다.
같은 기준으로 여러 값을 가져와야 합니다.
그리고 많은 사람들이 이렇게 말합니다.
“XLOOKUP으로는 한계가 있네...”
하지만 문제는 XLOOKUP이 아닙니다. ‘위치 처리’를 같이 쓰지 않았기 때문입니다.
XLOOKUP의 구조는 명확합니다.
=XLOOKUP(찾을 값, 찾을 범위, 반환범위)
기준값 1개
반환열 1개
즉,
“무엇을 찾을지”에는 강하지만
“어디에서 가져올지”는 고정되어 있습니다.
실무에서는 오히려 “어디서 가져올지”가 더 많이 바뀝니다.
월별로 다른 열에서 값 조회
선택한 항목에 따라 가져올 열 변경
보고서 구조가 수시로 수정
이때 필요한 것이 바로 INDEX + MATCH입니다.
✔ 매출 데이터 시트
A열 : 제품 코드
B~E열 : 1월 ~ 4월 매출
✔ 보고서 시트
제품 선택
월 선택
해당 월 매출 자동 표시
질문은 단순합니다.
“제품 C001의 1월 매출은 얼마인가?”
앞의 글에서 XLOOKUP에 대해 설명드린 것처럼 제품 C001의 1월 매출을 가져오는 것은 쉽습니다.
=XLOOKUP(A7, 'Sales data'!A:A, 'Sales data'!B:B)
하지만 불러오는 data들의 순서나 방식이 일정하지 않다면 반환 범위를 매번 바꿔야 합니다.
=XLOOKUP(A2, 'Sales data'!A:A, 'Sales data'!C:C)
XLOOKUP 함수로 각 행의 값을 순서대로 불러올 수는 있지만 행이 늘어나거나 순서가 바뀌면 수식도 함께 수정해야 합니다.
여기서 한계가 보입니다.
✔ 역할을 나누기
MATCH → 열 번호 결정
INDEX → 해당 열 전체 선택
XLOOKUP → 제품 행의 값 반환
즉, 조회와 위치를 분리합니다.
=MATCH(B6, 'Sales data'!B1:E1, 0)
선택한 월이 몇 번째 열인지 자동으로 계산합니다. 그러면 더 이상 열 번호를 외울 필요가 없습니다.
=INDEX(배열, 행번호, [열번호])
여기서 INDEX는 특정 행이 아니라 열 전체를 반환하는 선택값에 따라 바뀌는 구조가 됩니다.
=XLOOKUP(A12, 'Sales data'!A:A, INDEX('Sales data'!B:E, , MATCH(B11, 'Sales data'!B1:E1, 0)))
구조를 풀어보면 이렇습니다.
MATCH → 선택한 월의 위치 계산
INDEX → 해당 월 열 전체 반환
XLOOKUP → 제품 행의 값 찾기
이제 열이 늘어나도, 순서가 바뀌어도 수식은 수정할 필요가 없습니다.
이 구조의 장점은 명확합니다.
✔ 열 순서가 바뀌어도 안전
✔ 월이 추가돼도 수식 수정 없음
✔ 보고서 입력값만으로 제어 가능
✔ 대시보드에 바로 적용 가능
결국 차이는 이것입니다.
❌ 열 번호를 외우는 엑셀
⭕ 구조를 이해하는 엑셀
이 조합은 생각보다 자주 등장합니다.
월별 / 분기별 실적 조회
선택한 KPI 값 가져오기
제품·지점·담당자별 지표 조회
대시보드 핵심 수치 영역
특히,
보고서 구조가 자주 바뀌는 경우
사용자가 직접 조건을 선택하는 경우
INDEX 없이 관리하는 것은 거의 불가능에 가깝습니다.
XLOOKUP은 “무엇을 찾는지”를 해결합니다.
INDEX는 “어디서 가져오는지”를 해결합니다.
MATCH는 “위치를 자동 계산”합니다.
이 세 가지를 분리하는 순간, 조회는 단순한 함수 사용이 아니라 구조 설계가 됩니다.
실무에서 차이를 만드는 건 함수 개수가 아니라 이 역할 분리입니다.