
VLOOKUP으로 최대/최소값이 필요할 때: 정확한 찾기 방법 총정리
VLOOKUP max min 문제는 두 가지로 나뉩니다. (1) 최대/최소 “값 자체”를 구하는 경우, (2) 그 값을 가진 행의 라벨(이름·코드)을 구하는 경우. 또 정확 일치인지 근사값인지, 조건별(카테고리별)인지에 따라 해법이 달라집니다. 이 글은 각각의 상황에서 가장 안전하고 짧은 수식을 Quick Fix로 제시하고, 왜 그런지 원리까지 설명합니다.
Quick Fix: 상황별 바로 쓰는 수식 5개
-
① “값 자체”만 필요 — 전체 최대/최소
=MAX(데이터범위) // 최대 =MIN(데이터범위) // 최소가장 간단한 형태. VLOOKUP이 필요 없습니다.
-
② “라벨”이 필요 — 최대값을 가진 행의 이름(정확 일치)
=LET( vals, B2:B101, labels, A2:A101, INDEX(labels, XMATCH(MAX(vals), vals, 0)) )원리: MAX로 최댓값을 구해 그 정확 일치 위치를 XMATCH로 찾고, INDEX로 라벨을 반환합니다. (XMATCH가 없으면 MATCH 사용)
-
③ “라벨”이 필요 — 최소값의 이름(중복 시 첫 번째)
=INDEX(A2:A101, XMATCH(MIN(B2:B101), B2:B101, 0))동일 값이 여러 개면 첫 번째 항목을 반환합니다. 동률이 여러 개인 Top N 명단은 아래 응용을 보세요.
-
④ 조건별 최대/최소(카테고리별) — 값 자체
=MAXIFS(값범위, 조건범위, 조건) // Excel 2019+/Microsoft 365 =MINIFS(값범위, 조건범위, 조건)예:
=MAXIFS(매출[금액], 매출[카테고리], "Shoes"). 구버전은MAX(IF(...))배열식으로 대체합니다. -
⑤ 조건별 최대/최소의 라벨(이름·코드) — XLOOKUP 조합
=LET( flt, FILTER(A2:C101, C2:C101="Shoes"), // [이름, 값, 카테고리] names, TAKE(flt,,1), vals, TAKE(flt,,2), XLOOKUP(MAX(vals), vals, names, "없음", 0) )동적 배열이 없다면
INDEX/MATCH조합으로 동일하게 구현할 수 있습니다.
VLOOKUP으로 최대/최소를 “근사값”으로 찾는 법(정렬 필수)
VLOOKUP의 근사값 모드(마지막 인수 TRUE 또는 생략)는 정렬이 핵심입니다.
- 오름차순 정렬(작→큰):
=VLOOKUP(찾을값, 표, 열번호, TRUE)는 “찾을값 이하 중 가장 큰 값”을 찾습니다. 최소 경계 찾기에 유용. - 내림차순 정렬(큰→작): 권장하지 않음. VLOOKUP은 오름차순 기준으로 설계되어 있고, 내림차순은 예측 불가 동작을 낳습니다.
권장 패턴: “점수→등급”처럼 구간 매핑은 경계값을 오름차순으로 정렬한 뒤 근사값 모드로 등급을 반환하세요.
경계표(오름차순): 0-F, 60-D, 70-C, 80-B, 90-A
=VLOOKUP(점수, 경계표, 2, TRUE)
“최대/최소의 라벨”을 VLOOKUP으로 직접 구하기가 어려운 이유
VLOOKUP은 좌측 첫 열에서 키를 찾고 오른쪽으로만 반환합니다. “최댓값을 가진 행의 이름”은 키가 값 범위가 되어야 하는데, 보통 값이 오른쪽에 있어 바로 쓰기 어렵습니다. 아래 두 가지로 우회합니다.
- INDEX/XMATCH + MAX/MIN (추천): 방향 제약이 없고, 다중조건·중복 처리도 수월.
- CHOOSE로 가상 2열 배열 구성 + VLOOKUP (가능): 값열을 왼쪽으로 만들어 강제 적용.
=VLOOKUP(MAX(B2:B101), CHOOSE({1,2}, B2:B101, A2:A101), 2, FALSE)
설명: CHOOSE({1,2}, 값, 라벨)로 [값|라벨] 가상표를 만든 뒤, 최댓값을 정확 일치로 찾아 라벨을 반환합니다.
실무 예제: 재현 가능한 샘플
데이터표( A1:C11 ) — A:이름, B:매출, C:카테고리
| 이름 | 매출 | 카테고리 |
|---|---|---|
| Kim | 320000 | Shoes |
| Lee | 780000 | Apparel |
| Park | 540000 | Shoes |
| Choi | 180000 | Apparel |
| Jung | 920000 | Shoes |
| Han | 410000 | Apparel |
예제 1 — 전체 최대 매출의 이름
=INDEX(A2:A7, XMATCH(MAX(B2:B7), B2:B7, 0))
예제 2 — Shoes 카테고리 최대 매출(값 자체)
=MAXIFS(B2:B7, C2:C7, "Shoes")
예제 3 — Shoes 카테고리 최대 매출의 이름
=LET(
flt, FILTER(A2:C7, C2:C7="Shoes"),
names, TAKE(flt,,1), vals, TAKE(flt,,2),
XLOOKUP(MAX(vals), vals, names, "없음", 0)
)
예제 4 — 최소 매출 Top 2의 이름(동률 포함)
=LET(
k, 2,
idx, XMATCH(SMALL(B2:B7, SEQUENCE(k)), B2:B7, 0),
INDEX(A2:A7, idx)
)
동적 배열로 상위/하위 N명을 한 번에 뽑아 보고서 박스를 만들 수 있습니다.
체크리스트(필수 습관)
- 정확/근사 모드 구분: 구간 매핑은 근사(TRUE), 특정 값 찾기는 정확(FALSE).
- 정렬 규칙: 근사(TRUE)는 오름차순 정렬이 필수. 정렬이 틀리면 오답.
- 중복 처리: 동률이 여럿이면 XMATCH는 첫 번째만. Top N은 LARGE/SMALL + INDEX/XMATCH.
- 방향 제약: VLOOKUP은 오른쪽만 반환. 거꾸로 필요하면 INDEX/XMATCH 또는 CHOOSE로 우회.
- 예외 처리:
IFERROR( … , "없음")으로 보고서 품질 유지.
트러블슈팅
| 증상 | 원인 | 해결 |
|---|---|---|
| #N/A | 정확 일치인데 값이 없음 | 오타/공백(TRIM), 데이터 유형(숫자↔텍스트) 점검, IFERROR로 마감 |
| 근사값이 이상함 | 정렬 미흡 | 키 열 오름차순 정렬 확인 |
| 라벨을 못 가져옴 | VLOOKUP 방향 제약 | INDEX/XMATCH로 전환, 또는 CHOOSE로 가상 표 구성 |
| Top N이 틀림 | 동률/중복 고려 누락 | LARGE/SMALL + SEQUENCE + INDEX/XMATCH 패턴 사용 |
대체/응용: 최신 함수 조합
- XLOOKUP: 정확/근사·앞/뒤 검색·미발견 기본값까지 한 번에. 최대/최소 라벨은
XLOOKUP(MAX(vals), vals, names, , 0)처럼 직관적. - MAXIFS/MINIFS: 조건별 최대/최소를 보조열 없이 바로 계산.
- TAKE/FILTER/LET: 보고서 블록(Top/Bottom N)을 동적 배열로 생성.
관련 글
외부 출처(권위 문서)
- Microsoft Support — VLOOKUP 함수
- Microsoft Support — XLOOKUP 함수
- Microsoft Support — MAXIFS/MINIFS 함수
맺음말 — 최대/최소가 필요할 때 VLOOKUP을 직접 쓰는 경우는 오름차순 근사 모드(구간 매핑) 정도입니다. “라벨 반환”이나 “조건별 최대/최소”라면 INDEX/XMATCH + MAX/MIN 또는 MAXIFS/MINIFS · XLOOKUP이 더 정확하고 안전합니다.