엑셀365에서 INDEX 함수와 MATCH 함수를 결합하면, 데이터를 매우 정밀하고 유연하게 검색할 수 있습니다. 특히 VLOOKUP 함수가 가진 방향 제한(왼쪽 열 참조 불가)이나 열 번호 고정 문제를 완전히 극복할 수 있어, 실무에서 데이터 조회 정확도를 높이고, 유지보수를 쉽게 만들 수 있는 조합입니다.
INDEX
함수: 지정한 범위에서 행과 열 번호를 기준으로 값을 반환MATCH
함수: 특정 값이 범위 내 몇 번째 위치에 있는지를 반환두 함수를 결합하면 “어디에서 무슨 값을 찾고, 결과를 몇 번째에서 가져올지”를 유연하게 제어할 수 있습니다. 특히 데이터의 구조가 바뀌더라도 수식 오류 없이 작동하므로 표 구조 변경에 강한 검색 공식으로 널리 사용됩니다.
=INDEX(array, row_num, [column_num])
array
: 참조할 범위row_num
: 가져올 행 번호column_num
: (선택 사항) 가져올 열 번호=INDEX(A2:C5, 2, 3)
→ A2:C5 범위에서 2번째 행, 3번째 열의 값을 반환
A | B | C |
---|---|---|
홍길동 | 서울 | 1000 |
김영희 | 부산 | 1200 |
즉, INDEX는 “몇 번째 행, 몇 번째 열”의 교차점 값을 추출합니다.
=MATCH(lookup_value, lookup_array, [match_type])
lookup_value
: 찾을 값lookup_array
: 검색 범위(한 행 또는 한 열)match_type
: 일치 방법 (0은 정확히 일치)=MATCH("부산", B2:B5, 0)
→ B열에서 ‘부산’이 있는 행 번호 2 반환 (두 번째 위치)
MATCH 함수는 INDEX 함수의 행 또는 열 번호를 동적으로 계산하는 데 최적입니다. 이 둘을 결합하면 데이터 구조가 바뀌어도 자동 추적 가능해집니다.
A | B | C |
---|---|---|
사번 | 이름 | 급여 |
A1001 | 김철수 | 3200 |
A1002 | 이영희 | 3000 |
=INDEX(C2:C4, MATCH("이영희", B2:B4, 0))
→ B열에서 ‘이영희’를 찾아 같은 행의 C열(급여) 값을 반환 → 결과: 3000
A | B | C |
---|---|---|
코드 | 상품명 | 단가 |
P001 | 모니터 | 150000 |
P002 | 키보드 | 30000 |
=INDEX(A2:C3, MATCH("키보드", B2:B3, 0), MATCH("단가", A1:C1, 0))
→ 행 위치는 상품명 기준, 열 위치는 제목 ‘단가’ 기준으로 자동 매칭 → 결과: 30000
장점: 열 위치를 숫자로 고정하지 않으므로, 표 구조가 바뀌어도 수식 수정 필요 없음
VLOOKUP | INDEX + MATCH |
---|---|
검색 기준은 첫 번째 열로 고정 | 어떤 열에서도 검색 가능 |
열 번호를 숫자로 입력해야 함 | MATCH로 동적 계산 가능 |
왼쪽 열은 참조 불가 | 왼쪽/오른쪽 자유롭게 참조 가능 |
구조 변경 시 오류 발생 | 구조 변경에 유연하게 대응 |
실무에서 제품 코드로 제품명 찾기, 직원명으로 사번 찾기, 고객명으로 등급 확인 등 다양한 상황에 적용할 수 있으며, 특히 표가 크거나 복잡할수록 INDEX + MATCH의 진가가 발휘됩니다.
엑셀365의 동적 배열이나 OFFSET, COUNTA를 활용해 INDEX + MATCH 수식을 동적으로 확장할 수도 있습니다.
=INDEX(매출!C2:C1000, MATCH(A2, 매출!A2:A1000, 0))
→ A2에 입력된 고객명을 기준으로 매출 시트에서 매칭된 금액 가져오기
여기서 C열 매출 데이터가 늘어나면 OFFSET이나 테이블 기능(Ctrl + T
)을 통해 범위가 자동 확장되도록 설정하면 유지보수가 쉬워집니다.
실제로는 VLOOKUP보다 INDEX + MATCH가 더 빠릅니다, 특히 열 수가 많거나 큰 범위를 참조할 경우에 더욱 그렇습니다.
이유는 VLOOKUP은 전체 테이블을 읽고 왼쪽부터 오른쪽으로 값을 찾지만, INDEX + MATCH는 열 단위로 검색하고 반환하므로 불필요한 데이터 접근을 줄일 수 있습니다.
단, 너무 많은 수식을 사용하는 경우는 처리 속도에 영향을 줄 수 있으므로 동적 범위와 결합해 필요한 부분만 참조하는 방식이 효율적입니다.
네, INDEX + MATCH 조합을 배열 수식 형태로 확장하면 여러 조건을 동시에 만족하는 값도 검색할 수 있습니다.
=INDEX(D2:D100, MATCH(1, (B2:B100="홍길동")*(C2:C100="영업"), 0))
※ 배열 수식으로 Ctrl + Shift + Enter
입력 필요 (또는 엑셀365는 자동 배열)
이 방식은 실무에서 복합 키로 데이터 찾을 때 매우 유용하며, VLOOKUP으로는 처리할 수 없는 고급 조건도 손쉽게 구현할 수 있습니다.
MATCH 함수에서 match_type
을 잘못 설정하면 예상치 못한 결과가 발생할 수 있습니다.
0
: 정확히 일치 (가장 일반적이고 안전)1
: 근사치, 오름차순 정렬 필요-1
: 근사치, 내림차순 정렬 필요대부분의 실무에서는 0
을 사용하는 것이 안전합니다. 특히 데이터가 정렬되지 않았을 경우 1
이나 -1
은 잘못된 결과를 유발할 수 있습니다.
엑셀365의 INDEX와 MATCH 함수는 복잡한 데이터에서도 정확하게 필요한 값을 찾아내는 강력한 검색 도구입니다. 수식의 유연성, 방향 자유도, 유지보수 편의성 등 VLOOKUP보다 훨씬 정밀한 제어가 가능해지므로, 실무에서 자주 사용하는 조회 작업에는 반드시 익혀야 할 필수 공식입니다. INDEX + MATCH로 데이터 검색 실력을 한 단계 업그레이드해보세요.
엑셀365에서 ActiveX 컨트롤은 사용자가 더욱 정교하고 인터랙티브한 사용자 인터페이스(UI)를 구성할 수 있도록 도와주는 고급 도구입니다.…
엑셀365 폼 컨트롤로 양식 자동화하기 실무 가이드 엑셀365의 폼 컨트롤(Form Controls) 기능은 사용자가 데이터 입력을…
엑셀365에는 수백 개의 기본 내장 함수가 있지만, 실무에서는 내장 함수만으로 부족한 상황이 종종 발생합니다. 이럴…
엑셀365에서 VBA(Visual Basic for Applications) 매크로는 반복되는 작업을 자동화하고, 사용자의 클릭이나 입력에 반응하여 맞춤형 엑셀…
엑셀365 슬라이서 기능으로 피벗 테이블 분석 효율 높이기 엑셀365의 슬라이서(Slicer) 기능은 피벗 테이블이나 표에서 필터링을…