이번엔 CHOOSE 함수를 알아보겠습니다. CHOOSE 함수는 경우에 따른 특정 연산 결과를 반환해야 할 경우 IF 함수를 대체해 수식을 효율적으로 만들 수 있는 함수입니다. 단독 사용으로도 훌륭하고, WEEKDAY 함수나 RANDBETWEEN 함수 등과 같이 사용하면 효과적입니다.
함수 정리 전에 현실에서 CHOOSE 함수를 사용하는 예를 보겠습니다.
외국인 친구와 함께 뷔페에 갔습니다. 음식들이 쭉 나열되어 있고 먹고 싶은 음식을 각각 골라서 우리의 접시에 담아왔습니다. 첫 번째 음식은 불고기, 두 번째 음식은 계란말이, 세 번째 음식은 김치, 네 번째 음식은 탕수육,... 등등 그리고 제일 끝 마지막 음식이 열 번째이고 냉면이라고 가정해 보겠습니다. 접시가 가득 차면 일단 먹겠죠. 맛있게 먹은 음식을 다음에 좀 더 가져오려고 합니다. 외국인 친구는 탕수육을 맛있게 먹은 것 같습니다. 그런데 음식의 명칭을 모르니 "네 번째 음식을 좀 더 가져와 줘"라고 부탁합니다.
다시 말해 음식을 이름으로 선택할 수 있지만, 음식명을 모른다면 순서로도 선택할 수 있다는 것이죠. 바로 CHOOSE 함수의 예입니다. 즉 나열된 어떤 것들 중 하나를 순서로 골라내는 것이 CHOOSE 함수의 기능입니다.
CHOOSEindex_num을 사용하여 인수 값 목록(value1, value2, value3 ...)에서 값을 반환합니다
CHOOSE(index_num, value1, [value2], ...)| index_num | 선택할 값의 숫서입니다.(1과 254 사이의 숫자 또는 숫자가 들어 있는 수식 또는 셀 참조) |
| value1 | index_num으로 선택한 첫 번째 값 |
| [value2] | [선택] index_num으로 선택한 두 번째 값 |
함수 정리는 위와 같습니다. 위에서 알아본 현실의 예를 그림으로 설명하면,
이렇게 됩니다. 총 10가지의 음식이 있으니 여기서 index_num은 숫자 10까지만 올 수 있게 되는 것이죠. 만약 음식이 5개라면 5까지일 것입니다. 위 함수 정리에서 index_num의 최대값이 254이니, 음식(value)은 가장 많게는 254가지를 나열할 수 있다는 것입니다. 그리고 반드시 1개는 존재할 테니 value1은 필수 항목이 되는 것입니다.
그럼, 위의 예제로 CHOOSE 함수를 사용해 보겠습니다. 10개는 너무 많으니, 중간의 "..."은 빼고 5개로 하면,
위와 같은 수식으로 "탕수육"을 반환할 수 있습니다. 물론 index_num이 2라면 "계란말이"를, 5라면 "냉면"을 반환합니다.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
이제 WEEKDAY 함수와 CHOOSE 함수를 사용하는 예제를 보겠습니다.
예제는 한 찌개 전문점의 요일별 메뉴입니다. 7월 한 달간에는 요일별로 동일한 메뉴가 위의 가격으로 제공되었습니다. 이 식당은 주말에는 운영하지 않았고 2주 동안 날짜별로 판매된 개수만 현황으로 기록했습니다. 알고 싶은 것은 날짜별 메뉴와 해당 일에 총 판매금을 알고 싶습니다.
CHOOSE 함수를 사용하려면 날짜의 요일을 순서(숫자)로 알아내야 합니다. 이건 WEEKDAY 함수로 반환할 수 있었습니다. 그리고 해당일의 메뉴는 입력해도 되지만 이미 작성해 두었으니, 참조만 하면 되겠습니다.
WEEKDAY 함수를 잘 모르신다면 아래 강좌를 클릭해 확인하시고 돌아오시길 바랍니다.
날짜별 메뉴부터 처리하겠습니다.
- 작성할 셀(E9)을 클릭하여 선택합니다.
- 수식 입력줄에서 CHOOSE 함수명을 작성합니다. ⇒ =CHOOSE(
- CHOOSE 함수의 첫 번째 인수 힌트(index_num)를 확인하고 요일을 숫자(WEEKDAY 함수 사용)로 반환합니다.
- WEEKDAY 함수명을 작성합니다. ⇒ =CHOOSE(WEEKDAY(
- WEEKDAY 첫 번째 인수 힌트(serial_number)를 확인하고 예약일(C9)셀을 참조합니다. ⇒ =CHOOSE(WEEKDAY(C9
- 쉼표로 구분, WEEKDAY 두 번째 인수 힌트(return_type)를 확인하고 2를 입력합니다.(월요일 1) ⇒ =CHOOSE(WEEKDAY(C9,2
- 닫힌 괄호를 입력하여 WEEKDAY 함수를 완성 ⇒ =CHOOSE(WEEKDAY(C9,2)
- 이제 value(n)를 순서대로 참조합니다. 메뉴명은 고정돼 있으니 자동 채우기 시 변하지 않도록 절대 참조로 고정합니다.
- 쉼표로 구분, B5 클릭해 참조 후 F4 키를 눌러 절대 참조. ⇒ =CHOOSE(WEEKDAY(C9,2),$B$5
- 쉼표로 구분, C5 클릭해 참조 후 F4 키를 눌러 절대 참조. ⇒ =CHOOSE(WEEKDAY(C9,2),$B$5,$C$5
- 쉼표로 구분, D5 클릭해 참조 후 F4 키를 눌러 절대 참조. ⇒ =CHOOSE(WEEKDAY(C9,2),$B$5,$C$5,$D$5
- 쉼표로 구분, E5 클릭해 참조 후 F4 키를 눌러 절대 참조. ⇒ =CHOOSE(WEEKDAY(C9,2),$B$5,$C$5,$D$5,$E$5
- 쉼표로 구분, F5 클릭해 참조 후 F4 키를 눌러 절대 참조. 닫힌 괄호를 입력하고 엔터로 셀 완성 ⇒ =CHOOSE(WEEKDAY(C9,2),$B$5,$C$5,$D$5,$E$5,$F$5)
- 최종, 작성한 E9셀로 나머지 셀을 자동 채우기(우측 하단에서 클릭 드래그) 합니다.
결과 해당일에 요일을 숫자로 반환, 반환된 숫자 순서에 해당하는 메뉴가 출력되는 것을 확인할 수 있습니다.
물론 value(n)는 "순두부찌개","된장찌개",... 순으로 입력해도 됩니다. 하지만 입력은 불편하고 오타의 가능성도 있으니, 참조가 좋습니다. 그러나 상대 참조 후 자동 채우기를 하면 참조 대상이 변하므로 변하지 않게 절대 참조하는 것이 중요합니다.
판매금도 반환해 보겠습니다. 여기서도 메뉴의 가격은 동일한 방식으로 처리하면 됩니다. 하지만 판매된 메뉴의 개수가 있으니 곱하기로 처리해야겠습니다.

- 작성할 셀(F9)을 클릭하여 선택합니다.
- 수식 입력줄에서 CHOOSE 함수명을 작성합니다. ⇒ =CHOOSE(
- CHOOSE 함수의 첫 번째 인수 힌트(index_num)를 확인하고 요일을 숫자(WEEKDAY 함수 사용)로 반환합니다.
- WEEKDAY 함수명을 작성합니다. ⇒ =CHOOSE(WEEKDAY(
- WEEKDAY 첫 번째 인수 힌트(serial_number)를 확인하고 예약일(C9)셀을 참조합니다. ⇒ =CHOOSE(WEEKDAY(C9
- 쉼표로 구분, WEEKDAY 두 번째 인수 힌트(return_type)를 확인하고 2를 입력합니다.(월요일 1) ⇒ =CHOOSE(WEEKDAY(C9,2
- 닫힌 괄호를 입력하여 WEEKDAY 함수를 완성 ⇒ =CHOOSE(WEEKDAY(C9,2)
- 이제 value(n)는 순서대로 참조합니다. 가격은 고정돼 있으니 절대 참조하고 판매 개수를 곱해 해당일의 판매금을 만들면 됩니다.
- 쉼표로 구분, B5 셀 절대 참조 후 판매 개수(D9)와 곱합니다. ⇒ =CHOOSE(WEEKDAY(C9,2),$B$5*D9
- 쉼표로 구분, C5 셀 절대 참조 후 판매 개수(D9)와 곱합니다. ⇒ =CHOOSE(WEEKDAY(C9,2),$B$5*D9,$C$5*D9
- 쉼표로 구분, D5 셀 절대 참조 후 판매 개수(D9)와 곱합니다. ⇒ =CHOOSE(WEEKDAY(C9,2),$B$5*D9,$C$5*D9,$D$5*D9
- 쉼표로 구분, E5 셀 절대 참조 후 판매 개수(D9)와 곱합니다. ⇒ =CHOOSE(WEEKDAY(C9,2),$B$5*D9,$C$5*D9,$D$5*D9,$E$5*D9
- 쉼표로 구분, F5 셀 절대 참조 후 판매 개수(D9)와 곱합니다. 닫힌 괄호를 입력하고 엔터로 셀 완성
⇒ =CHOOSE(WEEKDAY(C9,2),$B$5*D9,$C$5*D9,$D$5*D9,$E$5*D9,$F$5*D9)
- 최종, 작성한 F9셀로 나머지 셀을 자동 채우기(우측 하단에서 클릭 드래그) 합니다.
결과 위 그림처럼 판매금까지 정상 반환되는 것을 알 수 있습니다.
메뉴명 반환과 다른 점이라면 value(n) 인수들에 곱셈(수식)을 사용했다는 점입니다. 다양한 수식을 사용해 반환 값을 연산할 수 있다는 얘기입니다.
사실 위 예제는 "판매금"을 반환하기 위해서 "메뉴"를 반환할 필요는 없습니다. 하지만 지금처럼 "메뉴"를 반환했다면, "판매금"은 반환하는 방식은, 전혀 다른 개념의 함수이지만 INDEX 함수와 MATCH 함수를 통해서도 가능합니다. 이 함수들은 다음 강좌에서 알아보겠습니다.