이전 강좌 INDEX 함수에 이어 이번엔 MATCH 함수를 알아보겠습니다. 이전 강좌를 보신 분들이라면 MATCH 함수가 어떤 기능을 하는지 대략 눈치채셨을 것으로 생각합니다. MATCH 함수는 범위에서 특정 셀을 순서로 반환하는 기능입니다. 매우 단순합니다. 문제는 "뭐 하러?"입니다. 사실 MATCH 함수로 순서만 반환하는 경우는 거의 없습니다. 그렇게 반환된 순서로 또 다른 작업을 하기 위한 것이죠. 이전 강좌를 보지 않고 이 글로 들어오신 분들은 반드시 아래 강좌를 클릭해 내용을 보시고 돌아오시길 바랍니다.
일단 "뭐 하러?"를 알아보기 전에 MATCH 함수 사용법을 알아보겠습니다. 매우 단순한 함수이니 예를 보기 전에 함수부터 정리하겠습니다.
MATCH범위에서 찾을 값을 가진 셀의 순서를 반환
MATCH(lookup_value, lookup_array, [match_type])| lookup_value | lookup_array(범위)에서 찾을 값 |
| lookup_array | 검색할 범위 |
| match_type | [선택] lookup_array에서 찾을 lookup_value의 일치 형태. 생략 시 "보다 작음(1)"이 적용됨 보다 작음(1) - lookup_value 이하의 수에서 가장 큰 값. 정확히 일치(0) - lookup_value와 동일한 값(여러개가 있을 경우 첫번째) 보다 큼(-1) - lookup_value 이상의 수에서 가장 작은 값. |
함수 정리는 위와 같습니다. 간단하게 lookup_value는 찾을 값, lookup_array는 범위라는 것이죠. match_type 인수가 조금 이해하기 힘들긴 하지만 아주 특별한 경우가 아니라면 일반적으로 "정확히 일치"를 사용하므로 사실 생략하지 않는 것이 일반적인 방법입니다. 생략하면 기본 "보다 작음"이 되므로 일반적이라면 인수 3가지를 모두 정의해야 한다는 얘기입니다.
예제는 위와 같습니다. C7 셀은 데이터 유효성 검사로 음식 메뉴를 목록화해 두었습니다. 이 방법이 궁금하신 분들은 아래 강좌를 확인하시고 돌아와 주세요.
그럼, C7 셀로 선택된 메뉴가 전체 음식 메뉴 중 몇 번째 순서인지를 MATCH 함수로 알아보겠습니다.
- 작성할 셀(D7)을 클릭하여 선택합니다.
- 수식 입력줄에서 MATCH 함수명을 작성합니다. ⇒ =MATCH(
- 첫 번째 lookup_value 인수로 찾을 값을 가진 셀(C7)을 참조합니다. ⇒ =MATCH(C7
- 쉼표로 구분, 두 번째 인수 lookup_array로 음식 메뉴 전체를 범위로 참조합니다. ⇒ =MATCH(C7,B3:F3
- 쉼표로 구분, 세 번째 인수 match_type은 "정확히 일치"로 선택하고 엔터(닫힌 괄호 자동 생성 후 셀 완성) ⇒ =MATCH(C7,B3:F3,0)
결과, 2가 반환됩니다. 선택한 범위(lookup_array)에서 2번째 순서가 "된장찌개"라는 것이죠. 간단합니다.
다음, "뭐 하러?"에 대한 얘기입니다. "순서는 알았어. 그럼 그걸로 뭘 하려고?"라는 것이죠.
"된장찌개"가 나오는 요일을 반환하겠습니다. INDEX 함수를 사용할 것입니다. "요일"이라고 명시되었으니, 범위(array)는 확정입니다. 표에서 요일이 작성된 B2:F2가 되겠죠. 그럼, 남은 것은 "몇 번째냐?"라는 것이고, 그것이 방금 알아본 "메뉴 중 된장찌개의 순서"입니다. 즉 INDEX 함수의 두 번째 인수 column_num이 지금 만든 수식인 "MATCH(C7,B3:F3,0)"가 되는 것이죠.
- 작성할 셀(E7)을 클릭하여 선택합니다.
- 수식 입력줄에서 INDEX 함수명을 작성합니다. ⇒ =INDEX(
- array 인수로 표의 요일 범위를 참조합니다. ⇒ =INDEX(B2:F2
- 쉼표로 구분, 찾고자 하는 셀의 column_num(열 순서)을 방금 알아본 MATCH 함수와 동일한 방법으로 반환합니다. ⇒ =INDEX(B2:F2,MATCH(C7,B3:F3,0)
- 이때 INDEX 함수 안에서 MATCH 함수를 사용했으므로 바로 엔터를 치면 안 됩니다. 먼저 MATCH 함수의 괄호를 닫아 MATCH 함수를 완성합니다. - 최종 INDEX 함수의 괄호를 닫아 INDEX 함수도 완성하고 최종 엔터. ⇒ =INDEX(B2:F2,MATCH(C7,B3:F3,0))
결과, "화"가 반환됩니다. 수식이 다소 복잡해 보이지만, 원리는 간단합니다. INDEX 함수에서 반환하고자 하는 범위를 정하고, 그 순서는 MATCH 함수를 통해 찾아낸 것입니다. 물론, 이미 D7 셀에서 순서를 반환했으니 "MATCH(C7,B3:F3,0)" 대신 D7 셀을 참조해도 당연히 됩니다. 하지만 만약 순서를 반환하지 않았다면, 당연히 참조할 것도 없으므로 column_array는 MATCH 함수로 반환하는 방법밖에 없습니다.
이제 처리할 것은 "가격"만 남았습니다. 당연히 column_num이 바뀌지 않습니다. 바뀔 것은 찾고자 하는 범위(array)겠죠. 간단하니 직접 해 보시길 바랍니다. 정답은 아래 댓글에서 확인해 주세요. 그리고 데이터 유효성 검사로 목록화해 둔 C7 셀의 값을 변경하고 "순서, 요일, 가격"이 모두 정상 반영되는지도 확인하시길 바랍니다.