• 최초 작성일: 2009-10-19
  • 최종 수정일: 2026-09-24
  • 조회수: 25 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 수석과 꼴등 모두 표시하기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

질문 하나

…(중략)… 다음과 같은 데이터에서 최고 점수를 받은 사람과 최저 점수를 받은 사람을 표시하려고 합니다. Max나 Min 함수를 사용하면 될 것 같지만 점수가 같은 사람이 있을 때에는 잘 안됩니다. 주변에 물어봐도 다들 모르겠다고 하고… 어떻게 해야죠?

이름 점수
이순신85
강감찬100
을지문덕90
홍길동100
권율85
유비95
관우70
장비60
여포60
조조100

이 정도 데이터라면야... 눈으로 대충 보고 해결할 수 있겠습니다만, 자료가 많아지면 한계가 있습니다. 예제 데이터를 먼저 만들어보죠. 아래 버튼을 클릭하세요.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 지음

📊 신간 전자책(PDF) · 287쪽 · 13500원

엑셀 대시보드를 만드는 최적의 '표준 3계층 구조'

  • 3초 안에 읽히는 화면 설계 감각 습득
  • Microsoft Excel MVP의 실전 노하우 수록
  • 중간마진 없는 합리적인 가격, 오직 아이엑셀러에서만!
지금 구매하기 완성 화면 보기

수석과 꼴등 모두 표시하기

핵심 요약: INDEX·SMALL·IF 배열 수식으로 동점자 모두 찾기

MAX/MIN은 동점자가 있어도 값 하나만 보여주지만, INDEX+SMALL+IF 배열 수식을 아래로 복사하면 동점자 전원의 이름을 순서대로 나열할 수 있습니다.

  • 공동 수석: INDEX+SMALL+IF(MAX(범위)=범위, ...) 배열 수식(Ctrl+Shift+Enter)
  • 공동 꼴등: 같은 수식에서 MAX만 MIN으로 교체
  • 점수 표시: 찾은 이름으로 VLOOKUP
  • 오류 숨기기: 더 이상 동점자가 없는 칸의 #VALUE!는 조건부 서식으로 감춤

이 정도 데이터만 되더라도 눈으로 보고 해결하기란 쉽지가 않습니다. 데이터 정렬 기능을 이용하여 처리할 수 있긴 합니다만 원본 데이터 형태가 흐트러진다는 문제가 있습니다. 만약 데이터 형태를 그대로 둔 상태에서 처리해야 한다면 어떻게 해야 할까요?

100명의 이름과 점수를 무작위로 생성한 예제 데이터(Workplace 시트)를 대상으로, 공동 수석과 공동 꼴등을 모두 찾아 나열한 결과는 다음과 같은 모습이 됩니다(점수가 무작위로 생성되므로 실행할 때마다 동석자 수가 달라집니다).

공동 수석 공동 꼴등
이름 점수 이름 점수
HESDK79UHLNC0
EMNOV79

(더 이상 동점자가 없는 나머지 칸은 수식 결과가 #VALUE! 오류로 나오는데, '조건부 서식'을 이용해 화면에는 보이지 않도록 처리했습니다.)

오래간만에 배열 수식을 사용해 봅니다.

공동 수석의 이름을 알아내기 위해서 아래와 같은 수식을 사용하였습니다. B40:B49 영역을 범위로 지정한 다음 이 수식을 입력하고 <Ctrl+Shift+Enter>를 함께 눌러 마무리 합니다.

=INDEX(Workplace!$A$2:$A$101,SMALL(IF(MAX(Workplace!$B$2:$B$101)=Workplace!$B$2:$B$101,ROW(Workplace!$B$2:$B$101)-1,""),ROW()-A40))

공동 꼴등의 이름을 알아내기 위해서는 또 이런 수식을 사용했습니다. 다 똑같고 Max를 Min으로 바꿔 주었습니다. 역시나 D40:D49 영역을 범위로 지정한 다음, <Ctrl+Shift+Enter>를 함께 눌러주어야 합니다.

=INDEX(Workplace!$A$2:$A$101,SMALL(IF(MIN(Workplace!$B$2:$B$101)=Workplace!$B$2:$B$101,ROW(Workplace!$B$2:$B$101)-1,""),ROW()-A40))

점수의 경우에는 Vlookup 함수를 사용하였으므로 별도 설명은 생략합니다.

배열 수식에서 해당 값이 없을 때 생기는 오류 메시지를 처리하기 위해서 '조건부 서식'을 적용했습니다.

참, 예제 데이터를 만들기 위해 사용된 코드는 다음과 같습니다.

Sub MakeTable()
    Dim intRow As Integer
    Dim wrkSheet As Worksheet
    Set wrkSheet = Worksheets("Workplace")
    wrkSheet.Select
    
    With wrkSheet
        .Range("A1:B1") = Array("이름", "점수")
        
        For intRow = 1 To 100
            With .Range("A1")
                .Offset(intRow, 0) = RandomName(3)
                .Offset(intRow, 1) = Int(Rnd * 100)
            End With
        Next intRow
    
    End With
    
    MsgBox "예제 테이블을 다 만들었습니다. 순식간에... 그죠?", , "아이엑셀러 닷컴"
    Application.Goto Sheets("Preface").Range("A30"), True
    
End Sub

코드의 내용은 그냥 참고만 하세요. 관심있는 분들만…

다음 시간에…

정리 — 동점자 모두 찾기 배열 수식

목적 수식
공동 수석 이름 =INDEX($A$2:$A$101,SMALL(IF(MAX($B$2:$B$101)=$B$2:$B$101,ROW($B$2:$B$101)-1,""),ROW()-기준행)) (배열 수식)
공동 꼴등 이름 위 수식에서 MAX를 MIN으로 교체 (배열 수식)
해당 점수 VLOOKUP으로 찾은 이름의 점수 조회

자주 묻는 질문 (FAQ)

Q1. MAX나 MIN 함수로는 왜 동점자를 모두 찾을 수 없나요?

MAX와 MIN은 범위에서 가장 크거나 작은 '값' 하나만 반환할 뿐, 그 값을 가진 사람이 몇 명인지, 누구인지는 알려주지 않습니다. 동점자가 여러 명이면 그중 이름을 알아내는 별도의 방법이 필요합니다.

Q2. INDEX·SMALL·IF를 조합한 배열 수식은 어떻게 작동하나요?

IF(MAX(범위)=범위, ROW(범위)-오프셋, "")로 최고점과 값이 같은 행 번호들만 골라내고, SMALL로 그중 n번째로 작은 행 번호를 구한 뒤, INDEX로 그 행의 이름을 가져옵니다. 수식을 아래로 복사하면 n이 1, 2, 3…으로 늘어나면서 동점자를 순서대로 모두 나열하게 됩니다.

Q3. 동점자가 없는 칸에 나타나는 #VALUE! 오류는 어떻게 처리하나요?

동점자 수보다 아래쪽 행에서는 더 가져올 이름이 없어 수식이 #VALUE! 오류를 반환합니다. 이 오류 자체를 없애기보다는, '조건부 서식'을 이용해 오류가 난 셀의 글자색을 배경색과 같게 만들어 화면에 보이지 않도록 처리했습니다.

마치며

VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 닷컴 사이트 상단 메뉴에서 [Excel 강의] - [Excel 입문]을 먼저 보시면 이해하기 쉽습니다.