특정 날짜의 요일을 정수로 반환하는 WEEKDAY 함수지난 강좌에서 TEXT 함수를 통해 특정 날짜에서 요일만을 텍스트로 반환해 보았습니다. 단순히 요일만 반환해야 한다면 셀 표시 형식을 변경하면 됩니다. 경우에 따라서 DATE 함수를 사용해야겠지만 어쨌든 셀 표시 형식을 "aaa" 또는 "aaaa"로 변경하면 끝납니다. 하지만 요일에 따라 다른 연산이 돼야 하는 경우, 요일을 반환하고 또 다른 연산을 해야 합니다. 이전 강좌에서는 IF 함수와 TEXT 함수를 사용했었죠. 그런데 좀 더 다양한 형태로 요일을 계산하거나 구분하기 위해선 TEXT 함수로 요일을 처리하기보다 WEEKDAY 함수를 사용하는 편이 좋습니다. 가령 주말과 주중에 가격을 달리 받는 음식점이나 월, 화만 시간이 바뀌는 열차 시간 등, 특정 요일을 구분할 때는 WEEKDAY 함수를 사용하는 편이 수식을 간소화할 수 있습니다. __adsens-adv1__ 예제 파일은 한 음식점의 점심 식사 예약 현황입니다. 평일과 주말에 가격을 다르게 받고 있습니다. 예약일이 주말인지 아닌지를 반환하고 해당 요일의 음식 가격에 예약인원 곱하여 금액으로 계산해야 합니다. 이 경우 TEXT 함수를 사용해서 요일을 반환한다면, OR 함수를 또 사용해야 예약일이 주말(토요일이거나 일요일)인지 아닌지를 반환할 수 있습니다. 안될 것은 없지만 수식이 길어질 수밖에 없죠. 반면 WEEKDAY 함수를 사용하면 요일을 숫자로 반환할 수 있기 때문에 OR 함수를 사용하지 않더라도 부등호로 쉽게 구분할 수 있습니다. WEEKDAY날짜(날짜 표시 형식을 갖는 값 또는 셀, DATE 함수로 반환된 날짜)에서 해당하는 요일을 정수로 반환합니다.WEEKDAY(serial_number,[return_type])serial_number날짜(날짜 표시 형식을 갖는 값 또는 셀, DATE 함수로 반환된 날짜)return_type[선택] 요일을 어떤 순서로 반환할지 결정하는 타입(숫자)생략시 기본 1 (일요일 1, 월요일 2, 화요일 3, 수요일 4, 목요일 5, 금요일 6, 토요일 7) 함수 정리는 위와 같습니다. serial_number 인수로 지정한 날짜의 요일을 return_type에 따라 숫자 1, 2, 3, ... 형태로 반환한다는 얘기입니다. __adsens-adv1__ return_type 인수를 조금 더 설명하겠습니다. 기본은 1이고 생략 시 1로 처리됩니다. reutrn_type이 1인 경우 시작 요일을 "일요일"로 간주하고 반환 값을 1로 처리합니다. 다음 요일(월요일)로 넘어가면 다시 1이 더해져 반환 값이 2가 되고, 같은 방식으로 다음 요일들은 3, 4, 5, ... 로 반환됩니다. 하지만 통상적으로 한 주의 시작을 "월요일"로 생각하죠. 이 경우 return_type을 2로 설정하면, 시작 요일인 "월요일"을 1로, 마지막 요일인 "일요일"을 7로 반환 할 수 있습니다. 이렇게 2가지 형태만 있는 것은 아닙니다. 시작 요일을 "수요일"로 설정하여 "수요일"의 반환 값을 1로 설정할 수도 있습니다. 그렇다면 마지막 요일은 "화요일"이 되고 반환 값은 7이 되겠죠. 즉 return_type에 따라 요일의 반환 값을 다르게 설정할 수 있다는 얘기입니다. 그래서 return_type 별로 반환 값을 정리하면, 위 표와 같이 됩니다. 주로 사용하는 return_type은 1과 2입니다. 추가로 return_type을 10번대로 사용하면 1의 자리에 따라 시작 요일이 바뀐다고 생각하시면 좀 더 쉽게 기억할 수 있습니다. 11은 월, 12는 화, 13은 수, ... 만약 수요일을 시작일로 하고 싶다면 return_type을 13을 사용하면 되겠죠. 사실 함수 작성 시 인수 힌트만 잘 보시면 기억하실 필요도 없습니다. 대략적인 구조만 기억하면 됩니다. 이제 주중과 주말을 구분하겠습니다. WEEKDAY 함수의 return_type을 1로 설정하면, WEEKDAY 함수 반환 결과가 1보다 크고 7보다 작다면 주중, 아니라면 주말이 될 것입니다. return_type을 2로 설정하면 좀 더 간단해집니다. WEEKDAY 반환 결과가 6보다 작다면 주중, 아니라면 주말이 됩니다. 부등호 하나로 구분되는 것이죠. 즉 주중과 주말은 return_type을 2로 설정하는 것이 훨씬 간단해집니다. __adsens-adv1__ 일단 예제 파일의 평일과 주말의 금액만을 반환해 보겠습니다. 작성할 셀(E7)을 클릭하여 선택합니다.수식 입력줄에서 IF 함수명을 작성합니다. => =IF(IF 함수의 첫 번째 인수 힌트(logical_test)를 확인하고 조건(WEEKDAY 결과가 6보다 작다)을 작성합니다.WEEKDAY 함수명을 작성합니다. => =IF(WEEKDAY(WEEKDAY 첫 번째 인수 힌트(serial_number)를 확인하고 예약일(D7)셀을 참조합니다. => =IF(WEEKDAY(D7쉼표로 구분, WEEKDAY 두 번째 인수 힌트(return_type)를 확인하고 2를 입력합니다.(월요일 1) => =IF(WEEKDAY(D7, 2닫힌 괄호를 입력하여 WEEKDAY 함수를 완성한 후 "<6"를 입력합니다. => =IF(WEEKDAY(D7, 2)<6=> IF 함수의 logical_test(예약일이 평일)가 완성되었습니다.쉼표로 구분, IF 함수의 두 번째 인수 힌트(value_if_true)를 확인, 조건이 참(예약일이 평일)인 경우 반환 값(C4)을 참조. => =IF(WEEKDAY(D7, 2)<6,$C$4(주의! 자동 채우기 시 이동할 것을 방지하기 위해 절대 참조)쉼표로 구분, IF 함수의 세 번째 인수 힌트(value_if_false)를 확인, 조건이 거짓인 경우 반환 값(E4)을 참조, 닫힌 괄호를 입력하고 엔터로 셀 완성. => =IF(WEEKDAY(D7, 2)<6,$C$4,$E$4)(주의! 자동 채우기 시 이동할 것을 방지하기 위해 절대 참조)최종, 작성한 E7셀로 나머지 셀을 자동 채우기(우측 하단에서 클릭 드래그) 합니다. 결과, 그림처럼 평일과 주말의 금액이 해당 셀에 맞게 반환됩니다. __adsens-adv1__ 다음, 반환된 금액에 해당 예약 인원을 곱하기만 하면 끝입니다. 작성할 셀(E7)을 클릭하여 선택합니다.수식 입력줄에서 작성된 수식에 예약인원을 참조로 곱해준 후 엔터로 셀 완성 => =IF(WEEKDAY(D7,2)<6,$C$4,$E$4)*C7최종, 작성한 E7셀로 나머지 셀을 자동 채우기(우측 하단에서 클릭 드래그) 합니다. 결과, 요일에 해당하는 금액으로 총금액이 반환됩니다. 다음, 강좌 앞에서 언급했지만 TEXT와 OR 함수를 사용해도 동일한 결과를 얻을 수 있습니다. 이건 수식만 확인해 보겠습니다. 그림처럼 주말을 각각 OR 함수를 나누어 작성해야 하므로 수식이 길어집니다. WEEKDAY 함수를 사용하여 요일을 숫자로 반환하면 수식이 훨씬 간소해지는 것이죠. WEEKDAY.xlsx(9.9 Kb)save_alt __adsens-adv1__2025.10.11 / 09:31특정 값을 원하는 표시 형식의 반환하는 TEXT 함수 엑셀을 사용하면 할수록 셀 표시 형식의 필요성을 인식하게 됩니다. 사용자는 기계가 아니라 사람이기 때문이죠. 좀 더 효과적인 표현과 다양한 활용을 위해서는 표시 형식을 대충 넘어갈 수 없다는 것을 알게 됩니다. 이번 강좌도 그 일부분으로 생각할 수 있을 것 같습니다. 기본적으로 하나의 셀에는 하나의 표시 형식만을 사용할 수 있습니다. 즉 숫자인 표시 형식이거나 날짜인 표시 형식만을 사용할 수 있습니다. 하지만 때때로 하나의 셀에 일부는 숫자, 일부는 날짜로 사용해야 하는 경우도 있습니다. 가령 어떤 날짜에 판매된 금액을 하나에 셀에 표시해야 하는 경우가 그렇겠죠. 이렇게 2가지, 3가지 표시 형식을 같이 사용해야 하는 경우는 어떻게 처리할 수 있을까요? 바로 표시 형식으로 반환된 결과를 텍스트로 변환하는 것입니다. 숫자와 날짜만 해당하는 것은 아닙니다. 시간이든, 백분율이든 무엇이든 텍스트로 변환할 수 있습니다. 그렇게 변환된 것들은 표시 형식의 제약을 벗어나기 때문에 혼합 사용이 가능해집니다. TEXT특정 값(value)을 원하는 표시 형식(format_text)으로 반환합니다. 반환된 결과는 텍스트로 변환됩니다.TEXT(value, format_text)value텍스트로 변환할 특정 값farmat_textvalue를 나타내고 싶은 표시 형식 TEXT 함수는 위와 같이 정리할 수 있습니다. 특정 값을 표시하고 싶은 표시 형식으로 지정하면 끝입니다. 간단하죠. __adsens-adv1__ 예제 파일을 보기 전에 TEXT 함수를 간단하게 사용해보고 반환된 값이 텍스트로 변환되는 것부터 확인하겠습니다. 위 그림에서 B3셀은 날짜 표시 형식으로 입력한 것입니다. 그리고 C3셀은 B3셀을 TEXT 함수로 변환한 것입니다. 차이점이 보이시나요? B3셀은 우측 정렬, C3셀은 좌측 정렬 되어있습니다. B3셀은 숫자로, C3셀은 문자로 취급한 것이죠. 날짜의 실제 값은 숫자였습니다. 그러니 B3셀이 우측 정렬되는 것은 당연한 결과입니다. 그리고 C3셀처럼 그 값을 TEXT 함수로 감싸면 좌측 정렬, 즉 텍스트로 변환된다는 것이죠. 날짜의 실제 값이 숫자라는 것을 모르신다면 아래 강좌를 봐주시고 더불어 시간 역시 실제 값은 숫자라는 사항까지 확인해 주시길 바랍니다. 셀 서식 - 표시 형식 ⓰ 날짜와 시간의 이해셀 서식 표시 형식 중 날짜와 시간의 표시 형식을 사용했을 경우 실제 값을 알아봅니다. 날짜의 표시 형식의 자동으로 바뀌는 것을 확인하고 날짜와 시간이 계산될 수 있는 이유를 설명합니다.https://flylight.kr/ 그리고 날짜의 표시 형식까지 반드시 아래 강좌를 보시고 익히시길 바랍니다. 물론 알고 있는 사항이라면 건너뛰셔도 좋습니다. 셀 서식 - 표시 형식 ⓱ 날짜의 표시 형식 yyyy-mm-dd셀 서식 표시 형식 중 날짜의 표시 형식에 대해 알아봅니다. 기본 형식 yyyy-mm-dd를 알아보고 y,m,d등 날짜의 표시 형식 기호의 의미를 알아보고 여러 가지 형식으로 날짜를 표시합니. 날짜 작성 시 주의 사항을 설명합니다.https://flylight.kr/ __adsens-adv1__ 이제 예제 파일을 보겠습니다. 예제 파일은 한 식당의 아침 식사 예약 현황입니다. 이 식당의 아침은 기본 반찬에 요일별로 국의 종류만 바뀌어 나가는 형태입니다. 그런데 특별히 금요일에는 기본 반찬에 하나의 반찬이 더 나가기 때문에 금액이 6,000원이고 나머지는 5,000원으로 고정되어 있습니다. 최종 알고 싶은 것은 예약자별 금액입니다. 주문일반에는 예약자명과 날짜를 한 번에 확인하기 위해 같이 표시하려 합니다. 두 셀 값을 연결해야 하니 & 기호의 사용은 필수입니다. & 기호 사용법을 모르신다면 아래 강좌로 확인해 주세요. 알고 있다면 역시 넘어가셔도 좋습니다. 수식에서 문자, 숫자, 참조의 연결 &엑셀 수식에서 값을 연결하는 방법을 설명합니다. 수식에서 숫자와 문자를 혼합하여 사용하면 어떤 결과가 나오는지 확인합니다. 숫자와 문자를 구분하고 & 기호 연결하면 수식에서도 문자를 사용할 수 있다는 것을 확인합니다. 숫자, 문자, 참조를 & 기호로 연결해 보고 문자의 경우 반드시 큰따옴표를 사용해야 한다는 것을 알아봅니다.https://flylight.kr/ __adsens-adv1__ 일단 어떤 결과가 나올지 두 셀을 연결해 보겠습니다. H8셀을 선택하고 수식을 그림처럼 작성하면 간단하게 예약자와 날짜가 하나의 셀에 같이 표시될 것 같지만, 결과는 그림처럼 예약자 다음으로 연결된 날짜는 이상한 숫자로 표시됩니다. 엑셀이 날짜를 처리하는 방식을 이해하고 있다면 이 숫자가 무엇인지 아실 것입니다. 1900년 1월 1일부터 45936일째라는 것이죠. 원하는 결과가 아닙니다. 이걸로는 며칠인지 알 수 없죠. 날짜는 셀 표시 형식이 날짜여야만 확인할 수 있습니다. 그런데 주문일반 항목에는 예약자명이 있어 날짜 표시 형식으로는 표기할 수 없습니다. 바로 이런 경우 날짜의 표시 형식을 그대로 유지한 채 텍스트화시킨다면 모든 것이 해결됩니다. 바로 TEXT 함수를 사용해야 한다는 것이죠. 작성할 셀(H8)을 클릭하여 선택합니다. 수식 입력줄에서 수식을 변경합니다.참조된 B8셀까지는 그대로 사용합니다. => =B8& 기호롤 연결하고 날짜와의 구분을 위해 " / "를 입력. => =B8&" / "다시 & 기호로 연결하고 날짜(D8)셀의 표시 형식(YYYY-MM-DD) 형태로 텍스트화하기 위해 TEXT 함수를 사용한 후 엔터=> =B8&" / "&TEXT(D8,"YYYY-MM-DD") 최종, 작성한 H8셀로 나머지 셀을 자동 채우기(우측 하단에서 클릭 드래그) 합니다. 결과 그림처럼 예약자와 날짜가 원하는 형태로 작성됩니다. __adsens-adv1__ 다음, 금액을 작성하려 합니다. 그런데 일단 금액을 계산하기 위해선 요일을 알아야 합니다. 금요일은 금액이 다르기 때문이죠. 요일 항목에 일단 셀 표시 형식을 변경하여 요일을 반환해 보겠습니다. 작성할 셀(E8)을 클릭하여 선택합니다.수식 입력줄에서 일단 날짜를 참조하고 엔터로 수식을 완성합니다.다시 E8셀을 클릭하여 선택한 후 ctrl+1로 셀 서식 대화상자를 띄웁니다.표시 형식 탭에서 사용자 지정을 클릭합니다.형식란에 요일만 표시하는 표시 형식 aaa를 입력합니다.셀 서식 대화상자의 확인 버튼을 클릭합니다. => E8셀이 날짜에서 요일만 반환됩니다.다시 E8셀을 클릭하여 선택한 후 나머지 빈 셀들을 자동 채우기(우측 하단에서 클릭 드래그) 합니다. 요일은 반환되었습니다. 이제 금액 항목에는 해당 요일이 "금"이라면 6,000원으로, 아니라면 5,000원으로 일단 표시해 보겠습니다. 간단하게 IF 함수를 사용하겠습니다. 정상 표시된다면 나중에 인원만 곱해주면 금액 항목까지 완성될 것입니다. 작성할 셀(F8)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명 IF을 작성합니다. 첫 번째 인수 힌트(logical_test)를 확인하고 조건(요일이 "금")을 작성합니다. 쉼표로 구분, 두 번째 인수 힌트(value_if_true)를 확인하고 조건이 참인 경우(요일이 "금") 반환할 값(6000)을 참조합니다.(주의! 자동 채우기 시 이동할 것을 방지하기 위해 절대 참조)쉼표로 구분, 세 번째 인수 힌트(value_if_false)를 확인하고 조건이 거짓인 경우 반환할 값(5000)을 참조한 후 엔터로 수식을 완성.(주의! 자동 채우기 시 이동할 것을 방지하기 위해 절대 참조)최종, 작성한 F8셀로 나머지 셀을 자동 채우기(우측 하단에서 클릭 드래그) 합니다. 결과 금액은 반환되었지만 모두 5000으로 되었습니다. 예상대로라면 F11과 F14는 금요일이기 때문에 6000이 반환되었어야 합니다. 왜 이럴까요? 지금 작성한 F8:F14 범위의 수식에는 문제가 없습니다. 예상하신 분들이 있을 것으로 생각합니다. 바로 IF 함수 logical_test(조건) 인수로 참조한 요일 항목의 셀 때문입니다. E8:E14 범위의 값은 날짜를 참조하고 표시 형식만 요일로 나타나게 처리한 것이죠. 실제 값은 숫자입니다. 숫자와 "금"이 같다는 조건은 참을 반환할 수 없습니다. 당연히 5000밖에 나올 수 없는 형태로 logical_test를 만든 것입니다. 즉 요일 항목이 텍스트로 만들어졌어야 한다는 얘기가 되고 그러려면 TEXT 함수를 사용했어야 한다는 결론이 됩니다. 다시 요일 항목으로 TEXT 함수로 변경해 보겠습니다. 작성할 셀(E8)을 클릭하여 선택합니다.수식 입력줄에서 수식을 TEXT 함수를 사용하여 변경한 후 엔터로 셀을 완성합니다.최종, 작성한 E8셀로 나머지 셀을 자동 채우기(우측 하단에서 클릭 드래그) 합니다. 결과 F11과 F14의 값이 6000으로 정상 반환됩니다. __adsens-adv1__ 이제 남은 것을 반영된 금액에 인원만 곱해주면 되겠습니다. 작성할 셀(F8)을 클릭하여 선택합니다.수식 입력줄에서 작성된 수식에 인원수를 곱해주고 엔터로 셀을 완성. => =IF(E8="금",$I$5,$I$4)*C8최종, 작성한 E8셀로 나머지 셀을 자동 채우기(우측 하단에서 클릭 드래그) 합니다. 결과 금액 값이 완성되었습니다. 마지막으로 주문일반 항목에 날짜를 요일만 표시하고 예약자의 총금액도 표시해 보겠습니다. 작성할 셀(H8)을 클릭하여 선택합니다.수식 입력줄에서 날짜 표시 형식에서 요일 표시 형식으로 변경합니다. => =B9&" / "&TEXT(D9,"aaa")& 기호로 연결하고 금액과 구분을 위해 " / "를 입력. => =B9&" / "&TEXT(D9,"aaa")&" / "다시 & 기호로 연결하고 최종 금액을 다시 TEXT 함수 #,##0(천 단위 구분기호 포함) 표시 형식의 텍스트로 추가 작성합니다. => =B9&" / "&TEXT(D9,"aaa")&" / "&TEXT(F9,"#,##0")다시 & 기호로 연결, 마지막으로 단위 "원"을 추가 작성한 후 엔터로 셀을 완성. => =B9&" / "&TEXT(D9,"aaa")&" / "&TEXT(F9,"#,##0")&"원"최종, 작성한 H8셀로 나머지 셀을 자동 채우기(우측 하단에서 클릭 드래그) 합니다. 결과, 예약자, 요일, 금액이 모두 하나의 셀에 표시되는 주문일반 항목이 완성됩니다. __adsens-adv1__ 꽤 길게 설명되었지만, 핵심은 날짜의 표시 형식과 실제 값을 이해하고 있어야 한다는 것이고, TEXT 함수를 사용하면 표시 형식으로 반환되는 결과를 텍스트화할 수 있다는 것입니다. 텍스트화된 것은 실제 값이 아니라 반환된 결과 그대로 값이 되니 연결도 할 수 있고 표현된 그대로 값을 처리할 수 있다는 것이죠. 이해가 되셨길 바랍니다. 추가로 한 가지 더 말씀드리면, 사실 요일을 지금처럼 TEXT 함수로 사용하기보다는 WEEKDAY 함수를 사용하는 편이 좋습니다. WEEKDAY 함수를 사용하면 좀 더 다양한 형태로 요일을 계산하거나 구분할 수 있습니다. 다음 강좌는 WEEKDAY 함수를 알아보겠습니다. TEXT 함수.xlsx(10.2 Kb)save_alt 2025.10.10 / 17:50시간을 계산하고 시간 표시 형식으로 반환하는 TIME 함수지난 강좌에서 날짜를 일반 표시 형식으로 작성해서 잘못된 계산이 되는 경우를 확인했습니다. 날짜의 년과 달이 10진수가 아니기 때문에 발생하는 문제였죠. 처음부터 날짜 표시 형식으로 작성했다면 생기지 않을 문제였습니다. 이런 경우는 또 있습니다. 바로 시간입니다. 시간도 10진수가 아닙니다. 오전 오후는 12진수, 시, 분, 초는 60진수로 계산됩니다. 일반 표시 형식으로 작성했다면 마찬가지로 계산 시 잘못된 결과를 반환합니다. 이것 역시 가장 좋은 방법은 처음부터 시간을 작성할 때 시간 표시 형식으로 작성하는 것입니다. 하지만 별생각 없이 일반 표시 형식으로 작성했다면, 계산을 위해선 다시 시간 표시 형식으로 작성하거나 시간 표시 형식으로 반환해 줄 함수가 필요합니다. 날짜 표시 형식으로 반환해 주는 함수가 DATE였죠. 시간 표시 형식으로의 반환은 TIME 함수입니다. __adsens-adv1__ 위 내용의 이해가 어렵다면 아래 강좌를 확인하고 돌아와 주세요. 날짜 계산하고 날짜 표 시형식으로 반환하는 DATE 함수엑셀 문서에서 숫자로 표시한 날짜를 날짜 표시 형식으로 바꾸는 근본적인 방법을 알아봅니다. 다른 대안인 DATE 함수의 기능과 인수를 정리합니다. 숫자로 표시한 날짜를 LEFT, MID, RIGHT 함수를 통해 DATE 함수의 인수 year, month, day로 사용하여 날짜 표시 형식으로 변경해 봅니다.https://flylight.kr/ 해결 방법은 2가지가 있었습니다. 근본적인 해결책은 역시 올바른 표시 형식으로 다시 작성하는 것이고, 그럴 수 없는 경우 함수를 사용하는 것입니다. 표시 형식을 다시 작성하는 경우 빠른 채우기를 이용하면 쉽게 바꿀 수 있었습니다. 그런데 날짜와는 달리 시간에서는 한 가지 더 고려해야 하는 사항이 있습니다. 그래서 이번엔 빠른 채우기를 이용해 시간 표시 형식으로 다시 작성하는 방법도 소개하겠습니다. 예제 파일은 고담동 주민자치센터의 주간 컴퓨터 강좌의 시간을 정리한 표입니다. 강의 시간을 알아내기 위해서 간단하게 종료 시간에서 시작 시간을 빼주면 되겠습니다. 그런데 여기서도 시작 시간과 종료 시간을 별생각 없이 앞의 2자리는 시, 뒤 2자리는 분으로 생각하고 일반의 표시 형식으로 작성(10:00 → 1000, 9:30 → 930, ...)했기 때문에 그냥 빼기로 수식을 만들면 이상한 결과가 반영됩니다. 의도한 바로는 강의 시간의 첫 자리는 시, 뒤 2자리는 분입니다. 그런데 위 결과를 확인하면 F9셀과 F12가 이상하다는 것을 알 수 있습니다. 170은 1시간 70분이란 것으로 이상한 시간이죠. 시간 19:00에서 17:30분은 빼면 1:30분이 되야 합니다. 그런데 지금 한 것은 시간이 아니라 단지 숫자 1900에서 1730을 뺀 것입니다. 당연한 결과죠. __adsens-adv1__ 1. 빠른 채우기를 이용해 시간 표시 형식으로 바꾸기 일단 잘못된 강의 시간을 지우고 시작 시간을 빠른 채우기를 이용해 변경해 보겠습니다. D5셀의 값을 확인하고 G5셀에 시간 표시 형식으로 다시 작성합니다. => 10:00- 주의! 빠른 채우기는 연속된 표에서만 가능하다는 것 주의해 주세요. H열 이상에서는 할 수 없습니다.같은 방법으로 D6셀의 값을 확인하고 G6셀에 시간 표시 형식으로 다시 작성합니다. => 13:00최종 G7셀에서 빠른 채우기(ctrl+e)를 진행합니다. => 자동으로 나머지 시작 시간이 시간 표시 형식으로 작성됩니다. 결과는 위 그림과 같습니다. 잘 된 것 같지만, 자세히 보면 몇 가지 문제를 확인할 수 있습니다. 930의 경우 9:30으로 반환되기를 기대했지만, 21:00으로 반환되었고, 1730의 경우 17:00으로, 900의 경우도 18:00으로 반환되었습니다. 왜일까요? 빠른 채우기의 원리를 생각하면 알 수 있습니다. 현재 빠른 채우기로 적용할 패턴의 의도는 시작 시간 앞의 문자 2개를 시로, 뒤 문자 2개를 분으로 가져오는 것입니다. 그런데 930의 경우는 앞 문자 2개를 가져오면 93이 됩니다. 93은 3일(72시간)이 지나고 21시간이 된 것입니다. 즉 무조건 앞 문자 2개를 가져오는 것이 아니라 4자리일 경우는 앞 문자 2개, 3자리일 경우는 앞 문자 1개를 가져오는 패턴이 되어야 합니다. 다음 1730의 경우도 17:00으로 표시된 이유는 시작 시간의 뒤 문자 2개를 가져오는 패턴이 아니라 숫자 0을 두 번 붙인 패턴으로 인식했기 때문입니다. __adsens-adv1__ 이런 문제 때문에 일반 표시 형식으로 사용한 시간의 경우 한 가지를 더 고려해 줘야 합니다. 가져올 원본이 4자리일 경우 앞 문자 2개, 3자리일 경우 앞 문자 1개를 "시"로 인식할 수 있는 패턴, 그리고 "분"은 그냥 0을 붙이는 것이 아니라 원본의 뒤 문자 2개를 가지고 오는 패턴으로 만들어야 한다는 것입니다. 즉 930을 9:30으로 한 번 더 작성하여 엑셀이 빠른 채우기의 패턴으로 인식할 수 있게 만들어줘야 한다는 것입니다. 다시 작성해 보겠습니다. 일단 잘못 작성된 G5:G12를 지웁니다. D5셀의 값을 확인하고 G5셀에 시간 표시 형식으로 다시 작성합니다. => 10:00같은 방법으로 D6셀의 값을 확인하고 G6셀에 시간 표시 형식으로 다시 작성합니다. => 13:00- 여기까지는 시작 시간의 앞 문자 2개를 가져와 "시"로 인식하는 패턴.- 분은 그냥 "0" 2개를 붙이는 패턴.같은 방법으로 D7셀의 값을 확인하고 G7셀에 시간 표시 형식으로 다시 작성합니다. => 9:30- 시작 시간이 3자리일 경우 앞 문자 1개를 가져와 "시"로 인식하는 패턴.- 시작 시간의 뒤 문자 2개를 "분"으로 인식하는 패턴.최종 G8셀에서 빠른 채우기(ctrl+e)를 진행합니다. => 자동으로 나머지 시작 시간이 시간 표시 형식으로 작성됩니다. 결과, 시작 시간이 시간 표시 형식으로 올바르게 작성됩니다. 나름 원리를 설명했지만, 어렵다면 다음과 같이 생각하셔도 좋습니다. 데이터를 2개만 입력하고 빠른 채우기(ctrl+e)를 했을 경우 올바른 결과가 나오지 않는다면, 3개, 4개, ... 입력해서 엑셀이 올바른 빠른 채우기의 패턴을 인식하도록 한 뒤 빠른 채우기(ctrl+e)를 하면 된다는 것입니다. 종료 시간도 같은 방법으로 시간 표시 형식으로 변경하면 되고, 만들어진 값으로 시작 시간과 종료 시간을 교체(복사, 붙여 넣기)한 후 종료 시간에서 시작 시작을 빼는 단순 수식으로 강의 시간을 만들어 주면 됩니다. 이 부분은 어렵지 않을 테니, 직접 해 보세요. __adsens-adv1__ 2. TIME 함수로 계산하기 시작 시간과 종료 시간을 어떤 이유로 시간 표시 형식으로 교체하면 안 될 경우 TIME 함수를 사용하여 강의 시간을 반환할 수 있습니다. TIME인수 hour, minute, second를 시간 표시 형식으로 반환TIME(hour, minute, second)hour시- 23보다 큰 값은 24로 나눈나머지가 시간 값으로 처리. (ex, TIME(27,0,0) => 3:00 AM)- 음수 값은 에러 발생minute분- 59보다 큰 값은 시간과 분으로 변환. (ex, TIME(12,70,0) => 1:10 PM)- 음수는 hour에서 뺀 시간으로 계산되고 hour가 0인 경우 에러 발생second초- 59보다 큰 값은 시간, 분, 초로 변환. (ex. TIME(0,0,130) => TIME(0,2,10) => 12:02 AM => 0:2:10(표시 형식 h:mm:ss))- 음수는 minute에서 뺀 시간으로 계산되고 hour와 minute가 모두 0인 경우 에러 발생 함수 정리는 위와 같습니다. 복잡해 보이지만 간단합니다. 시, 분, 초가 계산이 되지만 이전 일로 돌아가야 할 경우 에러가 발생한다는 것이네요. 함수 구문은 DATE 함수와 유사합니다. DATE 함수 인수가 year, month, day인 반면, TIME은 hour, minute, second가 됩니다. 두 함수가 모두 3개의 인수이고 기능상 DATE는 날짜를, TIME은 시간을 반환한다는 점이 다릅니다. 사실 날짜와 시간의 실제 값은 숫자입니다. 그냥 보기에 날짜와 시간으로 보이는 것뿐이죠. 기초 강좌 편에서 알아본 바 있습니다. 이 부분을 모르신다면 개념 정리를 위해 아래 강좌를 꼭 확인해 주세요. 셀 서식 - 표시 형식 ⓰ 날짜와 시간의 이해셀 서식 표시 형식 중 날짜와 시간의 표시 형식을 사용했을 경우 실제 값을 알아봅니다. 날짜의 표시 형식의 자동으로 바뀌는 것을 확인하고 날짜와 시간이 계산될 수 있는 이유를 설명합니다.https://flylight.kr/ TIME 함수 사용법을 알았으니, 위 예제는 TIME 함수를 적용한 종료 시간에서 TIME 함수를 적용한 시작 시작을 빼면 강의 시간이 반환될 것을 예측할 수 있습니다. 그런데 DATE 함수처럼 TIME 함수도 원본의 종료 시간과 시작 시간을 글자 수로 분리하고 추출해야 합니다. LEFT, MID, RIGHT 함수 중 선택해서 사용해야 한다는 얘기죠. LEFT, MID, RIGHT 함수를 모르신다면 아래 강좌를 참고해 주세요. LEFT, RIGHT, MID 함수 - 문자의 개수로 특정 문자를 추출하기 엑셀 LEFT, RIGHT, MID 함수의 사용법을 설명합니다. 각 함수의 인수를 정리하고 문자 개수로 특정 문자를 추출하는 방법을 소개합니다. 시작 문자에서 몇 개의 글자를 추출할지, 끝 문자 몇 개를 추출할지에 따라 LEFT와 RIGHT 함수 사용을 결정하고, 가져올 개수를 num_chars 인수로 사용한다는 것을 설명합니다. MID 함수는 시작할 위치 start_num 인수가 반드시 필요하다는 것을 알아봅니다.https://flylight.kr/ __adsens-adv1__ 그럼 TIME 함수의 인수들을 어떻게 설정해야 할지 생각해 보겠습니다. 일단 세 번째 인수 second는 현재 종료 시간과 시작 시간에 없습니다. 그냥 0으로 설정하면 되겠네요.(second => 0) 두 번째 인수 minute는 종료 시간과 시작 시간의 뒤 2개 문자를 반한하면 될 것이고요.(minute => RIGHT(셀 참조, 2)) 문제는 첫 번째 인수 hour입니다. 일반적인 생각으로는 앞 2개 문자를 반환(LEFT(셀 참조,2))하면 될 것 같지만, 10시가 안 되는 시간 즉 930(9:30) 같은 3자리 문자에서는 2개가 아니라 1개를 반환(93(X)->9(O))해야 합니다. LEFT함수의 num_chars 인수가 상황에 따라 변해야 한다라는 것이죠. 그래서 참조 셀이 4자리라면 2로, 3자리라면 1로 반환할 어떤 조치가 필요한 상황입니다. 4-2, 3-2가 되면 되겠죠. 그런데 이때 4와 3은 참조 셀의 전체 문자 개수입니다. 텍스트의 전체 개수를 반환하는 함수 LEN이 다시 필요해집니다. LEN 함수를 모르신다면 아래 강좌를 참고해 주세요. 문자 개수 세기 LEN 함수, 특정 문자의 순서를 찾는 FIND와 SEARCH 함수엑셀에서 특정 문자의 순서를 찾는 FIND, SEARCH 함수를 알아보고 전체 문자 개수를 세는 LEN 함수도 알아봅니다. 각 함수의 인수를 정리하고 FIND, SEARCH 함수의 차이점을 설명합니다. FIND 함수를 통해 이메일 주소에서 "@"까지의 문자 개수를 반환해 보고 "@" 다음에 나오는 도메인을 반환하는 방법을 설명합니다.https://flylight.kr/ 결론, 위의 경우 TIME 함수 첫 번째 인수 hour는 LEFT 함수를 사용해야 하고 추출한 문자 수는 LEFT 함수의 인수 text의 전체 문자 수에서 2를 뺀 숫자만큼의 개수를 추출해야 합니다.(hour => LEFT(셀 참조, LEN(셀 참조)-2)) TIME 함수의 인수까지 모두 알아 보았으니 실제 적용하겠습니다. 작성할 셀(F5)을 클릭하여 선택합니다.- 기본 수식은 종료 시간 - 시작 시간입니다.수식 입력줄에서 수식을 시작하고 먼저 종료 시간을 TIME 함수로 작성합니다. => =TIME(TIME 함수의 첫 번째 인수(hour)를 확인하고 종료 시간 데이터 앞 1개 또는 2개 문자를 LEFT 함수로 추출합니다. => =TIME(LEFT(E5,LEN(E5)-2)쉼표로 구분, TIME 함수의 두 번째 인수(minute)를 확인하고 종료 시간 데이터 뒤 2개 문자를 RIGHT 함수로 추출합니다. => =TIME(LEFT(E5,LEN(E5)-2),RIGHT(E5,2)쉼표로 구분, TIME 함수의 세 번째 인수(second)를 확인하고 초는 없으므로 그냥 0으로 입력하고 괄호를 닫아 종료 시간 함수를 완성합니다. => =TIME(LEFT(E5,LEN(E5)-2),RIGHT(E5,2),0)빼기를 입력하고 시작 시간을 TIME 함수로 작성합니다. => =TIME(LEFT(E5,LEN(E5)-2),RIGHT(E5,2),0) - TIME(TIME 함수의 첫 번째 인수(hour)를 확인하고 시작 시간 데이터 앞 1개 또는 2개 문자를 LEFT 함수로 추출합니다. => =TIME(LEFT(E5,LEN(E5)-2),RIGHT(E5,2),0) - TIME(LEFT(D5,LEN(D5)-2)쉼표로 구분, TIME 함수의 두 번째 인수(minute)를 확인하고 시작 시간 데이터 뒤 2개 문자를 RIGHT 함수로 추출합니다. => =TIME(LEFT(E5,LEN(E5)-2),RIGHT(E5,2),0) - TIME(LEFT(D5,LEN(D5)-2),RIGHT(D5,2)쉼표로 구분, TIME 함수의 세 번째 인수(second)를 확인하고 초는 없으므로 그냥 0으로 입력하고 괄호를 닫아 시작 시간 함수를 완성한 후 최종 엔터로 셀 수식을 반환합니다. => =TIME(LEFT(E5,LEN(E5)-2),RIGHT(E5,2),0) - TIME(LEFT(D5,LEN(D5)-2),RIGHT(D5,2),0) 결과 "1:30 AM"이 반환됩니다. 여기서 AM/PM은 의미 없습니다. 그냥 1:30분 동안 수업이 진행된다는 의미이니 있는 것이 더 혼란스럽습니다. __adsens-adv1__ 셀 표시 형식을 h:mm으로 변경하겠습니다. F5셀을 다시 클릭하여 선택한 후 ctrl+1로 셀 서식 대화 상자를 엽니다.표시 형식 탭이 아니라면 표시 형식을 탭을 클릭합니다.사용자 지정이 아니라면 사용자 지정을 클릭합니다. (이전에 셀 서식을 변경한 것이 아니라면 표시 형식에 사용자 지정으로 되어 있을 겁니다.)형식 부분란에 h:mm을 입력하거나 클릭하여 선택합니다.셀 서식 대화 상자의 확인 버튼을 클릭합니다. => 강의 시간의 AM 표시가 사라집니다.최종, F5셀로 나머지 셀을 자동 채우기(우측 하단에서 클릭 드래그) 합니다. 결과, 그림처럼 올바른 시간 계산 결과를 얻을 수 있습니다. 다시 강조하지만, 처음부터 시간을 시간 표시 형식으로 작성하는 것이 가장 좋은 방법입니다. 그렇지 못했다면 빠른 채우기를 통해 시간 표시 형식으로 변경하는 것이 좋고요. 그렇게 할 수 없는 경우에만 지금처럼 TIME 함수를 사용하시길 바랍니다. TIME.xlsx(10.3 Kb)save_alt __adsens-adv1__2025.09.27 / 09:47날짜 계산하고 날짜 표 시형식으로 반환하는 DATE 함수엑셀에서 좀 안타까운 함수들이 있습니다. DATA와 TIME 함수입니다. 이 함수를 찾아 여기까지 오신 분들은 아마도 조금 난감한 상황일 거로 생각합니다.그런데 사실 저도 겪은 상황입니다. 누구나 한 번씩 이런 상황을 겪고 나야 날짜와 시간의 표시 형식에 대한 중요성을 인식하게 되죠. 아직 겪지 않으신 분들이라면 이번 강좌를 통해 엑셀 문서 작성 시 날짜와 시간의 표시 형식의 중요성을 인식하시고 처음부터 표시 형식을 고려하여 작성하시는 습관을 들이시길 바랍니다.__adsens-adv1__ 예제 파일을 보겠습니다. 예제 파일은 한 중고폰 거래 매장의 중고폰 매입 현황입니다. 사용자들에게 중고폰을 구매하고 점검하여 다시 판매하는 매장입니다. 사용일 항목에는 사용자들로부터 매입한 중고폰이 얼마 동안 사용되었는지를 파악하려 합니다. 매입일에서 구매일을 빼면 간단하게 사용 기간을 알아낼 수 있습니다. 그런데 문제가 있습니다. 사용자 구매일과 매입일이 모두 날짜의 표시 형식으로 작성되지 않고 그냥 일반의 표시 형식으로 작성된 것입니다. 수식을 한번 적용해 보겠습니다. F5셀을 클릭하고 수식 입력줄에서 매입일에서 사용자 구매일을 뺀 수식을 작성합니다. 결과 119일이 반환됩니다. 맞나요? 9월 25일은 8월 6일에서 2달이 지나지 않은 날인데 119일이라니 말이 되지 않죠. 별생각 없이 이런 식으로 계산하면 잘못된 결과를 얻게 됩니다. 모두 아시겠지만, 8월은 31일까지만 있습니다. 32, 33, ... 없죠. 위 수식은 그냥 숫자 925 - 806을 당연한 결과입니다. 그렇다고 없는 날을 위 수식에서 빼주는 작업을 정말 골치 아픈 일이죠. __adsens-adv1__ 그럼, 사용자 구매일과 매입일을 날짜의 표시 형식으로 다시 작성하고 결과를 확인해 보겠습니다. 그림처럼 사용자 구매일과 매입일을 다시 날짜 표시형식으로 작성하고 동일하게 수식을 적용하면 50일이라는 올바른 결과를 얻을 수 있습니다. 왜 이렇게 되는지는 기초 강좌 날짜와 시간의 이해 편에서 설명했습니다. 잘 모르는 얘기라면 아래 강좌를 참고해 주세요. 셀 서식 - 표시 형식 ⓰ 날짜와 시간의 이해셀 서식 표시 형식 중 날짜와 시간의 표시 형식을 사용했을 경우 실제 값을 알아봅니다. 날짜의 표시 형식의 자동으로 바뀌는 것을 확인하고 날짜와 시간이 계산될 수 있는 이유를 설명합니다.https://flylight.kr/ 문제가 뭐라는 건지 아셨을 걸로 생각합니다. 날짜의 월은 우리가 사용하는 숫자 10진수가 아니고 30, 31, 28, 29진수가 복잡하게 사용된다는 것입니다. 그래서 처음부터 사용자 구매일과 매입일이 날짜 표시형식대로 작성되었다면 아무런 문제 없이 단순 빼기로 처리할 수 있던 것을 지금은 할 수 없게 된 것이죠. 해결 방법은 2가지입니다. 첫 번째 방법은 위처럼 사용자 구매일과 매입일을 모두 날짜 표시 형식으로 변경하는 것입니다. 그리고 그냥 빼기하면 되죠. 이렇게 말씀드리면 "저 많은 데이터를 어느 세월에 다시 작성해"라고 생각하시는 분들이 있을 텐데, 사실 빠른 채우기를 이용하면 손쉽게 바꿀 수 있습니다. 만약 다시 사용자 구매일과 매입일로 어떤 계산해야 할 경우가 있다면 이 방법이 가장 확실한 해결책입니다. 이 방법은 빠른 채우기 강좌 편을 참고하시고 직접 해 보시길 바랍니다. 특정 문자 추출하기 ❶ 빠른 채우기이미 만들어진 표의 데이터를 기반으로 하여 사용자가 입력한 패턴대로 빈 셀을 빠르게 완성해 주는 빠른 채우기 기능에 관해 설명합니다. 빠른 채우기를 해야 하는 상황을 소개하고 빠른 채우기를 할 수 있는 표의 상태를 만들어 봅니다. 여러 가지 상황으로 빠른 채우기를 진행해 보고 빠른 채우기를 할 수 없는 상태를 설명합니다.https://flylight.kr/ __adsens-adv1__ 두 번째 방법은 DATE 함수를 사용하는 방법입니다. 첫 번째 방법이 근본적인 해결책이지만, 어떤 이유로 원본의 표시 형식을 변경해선 안 된다면 이 함수를 사용하여 지금처럼 작성된 숫자를 날짜 표시 형식으로 반환하여 사용할 수 있습니다. DATE인수 year, month, day를 날짜 표시 형식으로 반환DATE(year,month,day)year년 (yyyy 표시 형식 추천)기준은 1900년이므로 1900 미만의 수는 1900이 더한 년으로 계산 (ex, 108 => 1900+108=2008)month월 (mm 표시 형식 추천)- 1월에서 12월 사이의 월을 나타내는 양의 정수나 음의 정수- 12보다 크면 그 값을 지정된 연도의 첫 번째 달에 더해 계산 (ex, DATE(2008,14,2) => 2009-02-02)- 음수이면 year의 이전 연도(year-1) 마지막 월(12월)에서 빼는 방식으로 계산 (ex, DATE(2008,-3,2) => 2007-02-02)day일 (dd 표시 형식 추천)- 1일에서 31일 사이의 일을 나타내는 양의 정수나 음의 정수- 지정된 달의 일 수보다 크면 그 값을 지정된 달의 첫째 날짜에 더하여 계산 (ex, DATE(2008,1,35) => 2008-02-04)- 음수이면 month의 이전 월(month-1) 마지막 날짜에서 빼는 방식으로 계산 (ex, DATE(2008,1,-15) => 2007-12-16) 함수 정리는 위와 같습니다. 2가지 주의하셔야 할 사항이 있습니다. 첫 번째 엑셀에서 기준이 되는 연도는 1900년이라는 것입니다. 그래서 year 인수를 1900 이상으로 사용하면 아무 문제가 없지만 1900보다 작은 수를 사용하면 1900을 더한다는 점을 기억해 주세요. 두 번째 month와 day 인수에는 음수 값이 들어올 수 있으며, 0월과 0일이 없기 때문에 이전 연도의 마지막 월과 다음 연도의 첫 번째 월, 이전 달의 마지막 일과 다음 달의 첫 번째 일을 고려하여 계산된다는 점입니다. 어렵게 생각하실 필요 없습니다. 10진수 계산이 날짜로 반영된다는 뜻입니다. 위 예제의 경우는 날짜를 계산할 필요는 없습니다. 단순히 숫자로 작성된 날짜에서 년, 월, 일을 추출하여 DATA 함수에 적용하면 됩니다.그런데 년, 월, 일을 글자 수로 분리하고 추출하려면, LEFT, MID, RIGHT 함수를 사용해야 한다는 것이죠. LEFT, MID, RIGHT 함수를 모르신다면 아래 강좌를 참고해 주세요. LEFT, RIGHT, MID 함수 - 문자의 개수로 특정 문자를 추출하기 엑셀 LEFT, RIGHT, MID 함수의 사용법을 설명합니다. 각 함수의 인수를 정리하고 문자 개수로 특정 문자를 추출하는 방법을 소개합니다. 시작 문자에서 몇 개의 글자를 추출할지, 끝 문자 몇 개를 추출할지에 따라 LEFT와 RIGHT 함수 사용을 결정하고, 가져올 개수를 num_chars 인수로 사용한다는 것을 설명합니다. MID 함수는 시작할 위치 start_num 인수가 반드시 필요하다는 것을 알아봅니다.https://flylight.kr/ 위 예제 사용일에 매입일을 날짜 표시 형식으로 반환해 보겠습니다. 작성할 셀(F5)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =DATE(첫 번째 인수 힌트(year)를 확인하고 매입일 데이터 앞 4개 문자를 추출합니다.앞 문자를 추출하기 위해 LEFT 함수명을 작성 => =DATE(LEFT(LEFT 함수의 첫 번째 인수 힌트(text)를 확인하고 E5셀을 참조. => =DATE(LEFT(E5쉼표로 구분, LEFT 함수의 두 번째 인수 힌트(num_chars)를 확인하고 가져올 문자 개수(4)를 입력한 후 닫힌 괄호까지 입력합니다. => =DATE(LEFT(E5,4)- year 인수로 LEFT 함수를 사용했습니다.쉼표로 구분, 두 번째 인수 힌트(month)를 확인하고 매입일 데이터 5번째 문자부터 2개를 추출합니다. => =DATE(LEFT(E5,4),중간 문자를 추출하기 위해 MID 함수명을 작성 => =DATE(LEFT(E5,4),MID(MID 함수의 첫 번째 인수 힌트(text)를 확인하고 E5셀을 참조. => =DATE(LEFT(E5,4),MID(E5쉼표로 구분, MID 함수의 두 번째 인수 힌트(start_num)를 확인하고 가져올 문자의 시작 위치(5)를 입력합니다. => =DATE(LEFT(E5,4),MID(E5,5쉼표로 구분, MID 함수의 세 번째 인수 힌트(num_chars)를 확인하고 가져올 문자 개수(2)를 입력한 후 닫힌 괄호까지 입력합니다. => =DATE(LEFT(E5,4),MID(E5,5,2)- month 인수로 MID 함수를 사용했습니다.쉼표로 구분, 세 번째 인수 힌트(day)를 확인하고 매일일 데이터 뒤 2개의 문자를 추출합니다. => =DATE(LEFT(E5,4),MID(E5,5,2),뒤 문자를 추출하기 위해 RIGHT 함수명을 작성 => =DATE(LEFT(E5,4),MID(E5,5,2),RIGHT(RIGHT 함수의 첫 번째 인수 힌트(text)를 확인하고 E5셀을 참조. => =DATE(LEFT(E5,4),MID(E5,5,2),RIGHT(E5쉼표로 구분, RIGHT 함수의 두 번째 인수 힌트(num_chars)를 확인하고 가져올 문자 개수(2)를 입력한 후 닫힌 괄호까지 입력합니다. => =DATE(LEFT(E5,4),MID(E5,5,2),RIGHT(E5,2)- day 인수로 RIGHT 함수를 사용했습니다.최종 DATE 함수의 괄호를 닫고 엔터로 셀을 완성합니다. => =DATE(LEFT(E5,4),MID(E5,5,2),RIGHT(E5,2)) 결과, 2025-09-25로 반환됩니다. 복잡해 보이지만 원리를 생각하면 어렵지 않습니다. year, month, day 인수를 모두 LEFT, MID, RIGHT 함수를 통해 추출한 것입니다. __adsens-adv1__ 같은 방법으로 사용자 구매일도 날짜 표시 형식으로 반환할 수 있습니다. 그리고 빼주면 되겠죠. 사용자 구매일은 직접 해 보시길 바랍니다. 위 수식과 동일하고 모든 참조를 E5셀에서 D5셀로 변경하면 됩니다. 수식만 확인하겠습니다. 결과, 1900-02-19로 반환됩니다. 숫자로 표시되지 않고 날짜로 표시되는 이유는 F5셀에서 매입일을 이미 날짜 표시 형식으로 한번 반환했었기 때문입니다. F5셀의 표시 형식이 이전 작업에서 날짜 표시 형식으로 바뀐 것이죠. 셀 값 50은 날짜 표시 형식으로, 1900년 1월 1일부터 50일째 되는 날인 1900년 2월 19일입니다. 즉, 표시 형식만 변경하면 원래 계산값으로 표현되다는 얘기입니다. F5셀을 클릭하여 선택합니다.홈 > 쉼표 버튼을 클릭합니다. => 1900-02-19가 50으로 바뀌고 표시 형식이 천 단위 구분기호가 들어간 회계 형식으로 바뀝니다.최종, 선택된 F5셀로 자동 채우기(우측 하단에서 더블 클릭하거나 클릭 드래그)를 진행하여 나머지 셀을 완성합니다. 결과, 그림처럼 올바른 사용일이 구해집니다. __adsens-adv1__ 한 번 더 말씀드리지만, 근본적인 해결책은 잘못된 표시 형식으로 만들었던 날짜를 날짜 표시 형식으로 만드는 것입니다. DATE 함수를 사용해야 할 경우는 그렇게 하면 안 되는 경우만 사용하는 것이고요. 가능한 빠른 채우기를 통해 날짜 표시 형식으로 변경하고 단순하게 계산할 방법으로 사용하시길 추천합니다. 그리고 역시 가장 좋은 방법은 문서를 작성할 때 처음부터 날짜의 표시 형식대로 작성하는 것입니다. 그랬다면 이 강좌를 보실 필요도 없었겠죠. DATE.xlsx(10.4 Kb)save_alt 2025.09.26 / 10:54REPLACE, SUBSTITUTE 함수 - 문자열 교체하기이전 강좌에서 특정 데이터의 문자열을 추출하는 방법을 알아보았습니다. 기본이 되는 함수는 LEFT, RIGHT, MID, LEN이었습니다. 하지만 단순 추출이 아니라 문제열 중 일부를 교체하려면 이 함수들만으로는 부족합니다. & 기호, IF, FIND, SEARCH 함수들을 사용해야 합니다. 수식이 복잡해질 수밖에 없죠. 이번엔 좀 더 단순하게 특정 문자열을 다른 문자로 교체하는 함수에 관해 알아보겠습니다. 예제 파일에서 첫 번째로 하고 싶은 것은 "다팔아 사원 목록"에서 주민등록번호 앞자리만 표시하고 나머지 뒷자리는 "*"로 대체하는 것입니다. 이건 이미 알아본 바 있습니다. LEFT 함수로 일부를 추출하고 & 기호를 사용하는 방법이었죠. 이 방법을 모르신다면 아래 강좌를 확인해 주세요. LEFT, RIGHT, MID 함수 - 문자의 개수로 특정 문자를 추출하기 엑셀 LEFT, RIGHT, MID 함수의 사용법을 설명합니다. 각 함수의 인수를 정리하고 문자 개수로 특정 문자를 추출하는 방법을 소개합니다. 시작 문자에서 몇 개의 글자를 추출할지, 끝 문자 몇 개를 추출할지에 따라 LEFT와 RIGHT 함수 사용을 결정하고, 가져올 개수를 num_chars 인수로 사용한다는 것을 설명합니다. MID 함수는 시작할 위치 start_num 인수가 반드시 필요하다는 것을 알아봅니다.https://flylight.kr/ __adsens-adv1__이 경우는 사실 주민등록번호 뒷자리를 교체했다고 보기보단 "*"로 재작성했다고 보는 편이 맞습니다. 물론 이 경우는 이렇게 사용하셔도 전혀 문제 될 것은 없습니다. 하지만 말 그대로 교체하는 방법도 있습니다. REPLACE 함수입니다. REPLACE지정된 텍스트(old_text)에서 일부(start_num에서 num_chars 만큼)를 다른 텍스트(new_text)로 바꿉니다.REPLACE(old_text, start_num, num_chars, new_text)old_text일부 문자를 바꿀 대상 문자열.start_numold_text에서 바꿀 첫 문자의 위치.num_chars바꿀 첫 문자의 위치(start_num)로부터의 개수.new_text바꿔 넣을 새 문자열. 함수 정리는 위와 같습니다. MID 함수와 굉장히 유사합니다. 단지 바꿔 넣을 새 문자열 new_text 인수가 4번째 인수로 존재한다는 것이 다른 뿐 나머지 인수는 모두 MID 함수와 같습니다. 즉 old_text에서 일부 문자를 MID 함수처럼 추출하여 new_text로 교체하는 것입니다. 주민번호(보안)를 작성해 보겠습니다. 작성할 셀(G5)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =REPLACE(첫 번째 인수 힌트(old_text)를 확인하고 참조로 값을 가져옵니다. => =REPLACE(D5쉼표로 구분, 두 번째 인수 힌트(start_num)를 확인하고 가져올 문자의 시작 위치(8)를 입력합니다. => =REPLACE(D5,8쉼표로 구분, 세 번째 인수 힌트(num_chars)를 확인하고 가져올 문자 개수(7)를 입력합니다. => =REPLACE(D5,8,7쉼표로 구분, 네 번째 인수 힌트(new_text)를 확인하고 대체할 문자(*******)를 입력한 후 엔터(닫힌 괄호 자동 생성 후 셀 완성). => =REPLACE(D5,8,7,"*******")주의! 문자는 항상 큰따옴표로 감싸서 사용.다시 완성된 G5셀을 클릭하고 나머지는 자동 채우기(우측 하단에서 클릭 드래그)로 완성합니다. 결과, 그림처럼 완성됩니다. 이전에 알아본 수식보다 훨씬 직관적으로 처리되었습니다. =LEFT(D5,6)&"-*******" → =REPLACE(D5,8,7,"*******") __adsens-adv1__ 다음, 지금처럼 바꿀 문자열을 위치와 개수로 반환하지 않고, 특정 문자열 자체를 변경하는 함수도 있습니다. 예를 들어 위 예제의 이메일에서 "kaver"란 문자열을 "maber"로 변경하고 싶은 경우입니다. SUBSTITUTE 함수입니다. SUBSTITUTE대상 문자열(text)에서 바꿀 문자열(old_text)을 찾아 새 문자열(new_text)로 교체합니다.SUBSTITUTE(text, old_text, new_text, [instance_num])text대상 문자열.old_text바꿀 문자열.new_text새 문자열.instance_num[선택] 대상 문자열에 바꿀 문자열(old_text)가 많을 경우 몇 번째를 바꿀 것인지 지정하는 수입니다.- 지정하지 않을 경우 모든 old_text 바꾸며, 지정할 경우 해당 위치의 old_text만 바꿉니다. 함수 정리는 위와 같습니다. 인수가 많아 보이지만 직관적이라 사용법이 간단합니다. 이메일에서 "kaver"를 "maber"로 바꿔보겠습니다. 작성할 셀(H5)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =SUBSTITUTE(첫 번째 인수 힌트(text)를 확인하고 참조로 값을 가져옵니다. => =SUBSTITUTE(E5쉼표로 구분, 두 번째 인수 힌트(old_text)를 확인하고 바꿀 문자열을 입력합니다. => =SUBSTITUTE(E5,"kaver"쉼표로 구분, 세 번째 인수 힌트(new_text)를 확인하고 교체할 새 문자열 입력한 후 엔터(닫힌 괄호 자동 생성 후 셀 완성). => =SUBSTITUTE(E5,"kaver","maber")- text에 바꿀 문자열 old_text가 여러 개 있지 않으니 네 번째 instance_num 인수를 작성할 필요 없습니다.다시 완성된 H5셀을 클릭하고 나머지는 자동 채우기(우측 하단에서 클릭 드래그)로 완성합니다. 결과, 그림처럼 이메일에 "kaver"가 모두 "maber"로 교체되었습니다. __adsens-adv1__ 추가로 SUBSTITUE 함수에서 instance_num을 사용하는 경우를 알아보겠습니다. 일반 전화 번호 표기법을 예를 들면, 방식은 다양하지만 보통 "OOO-OOO-OOOO"과 "OOO) OOO-OOOO"을 많이 사용합니다. 만약 "OOO-OOO-OOOO" 표기법을 "OOO) OOO-OOOO"로 바꾸고 싶다면 instance_num을 사용하여 간단하게 처리할 수 있습니다. instance_num을 사용하지 않으면 B3셀처럼 모두 교체, instance_num을 1로 사용하면 B4셀처럼 첫 번째만 교체, instance_num을 2로 사용하면 B5셀처럼 두 번째만 교체합니다. 원하는 결과를 반환하려면 instance_num을 1로 사용해야 하는 것이죠. 이런 기능을 활용하면 위처럼 특정 기호를 원하는 문자로 변경하거나 삭제하는 데 효과적으로 사용할 수 있습니다. REPLACE SUBSTITUTE 함수.xlsx(12.2 Kb)save_alt2025.09.25 / 10:44문자 개수 세기 LEN 함수, 특정 문자의 순서를 찾는 FIND와 SEARCH 함수문자의 개수를 이용해 특정 문자를 반환하는 함수 LEFT, RIGHT, MID를 알아보았습니다. 문자 앞에서는 LEFT, 뒤에서는 RIGHT, 중간 부분을 반환해야 할 때는 MID 함수를 사용하면 되었죠. 하지만, 이 함수들은 사실 전제 조건이 있습니다. 동일한 위치에서 같은 개수의 문자만 반환할 수 있다는 것이죠. 앞에서 2글자, 뒤에서 3글자, 세 번째 글자에서 2글자 같은 것만 반환할 수 있습니다. 그런데 현실에서는 동일 위치가 아닌 다른 위치, 같은 개수가 아닌 다른 개수의 문자를 반환해야 하는 경우도 있습니다. 이 경우 LEFT, RIGHT, MID 함수만으로는 원하는 결과를 얻을 수 없습니다. __adsens-adv1__ 예제 파일을 보겠습니다. 예제 파일에서 "이메일 도메인" 항목은 원본 "이메일" 항목 데이터에서 @ 다음 문자들을 반환해야 합니다. 물론 원본 데이터가 변경될 일이 없어 함수를 사용하지 않을 것이라면, 빠른 채우기가 가장 좋은 방법입니다. 텍스트 나누기를 통해서도 할 수 있죠. 두 가지 방법을 모르신다면 아래 강좌를 참고해 주시고요. 특정 문자 추출하기 ❶ 빠른 채우기이미 만들어진 표의 데이터를 기반으로 하여 사용자가 입력한 패턴대로 빈 셀을 빠르게 완성해 주는 빠른 채우기 기능에 관해 설명합니다. 빠른 채우기를 해야 하는 상황을 소개하고 빠른 채우기를 할 수 있는 표의 상태를 만들어 봅니다. 여러 가지 상황으로 빠른 채우기를 진행해 보고 빠른 채우기를 할 수 없는 상태를 설명합니다.https://flylight.kr/ 특정 문자 추출하기 ❷ 텍스트 나누기이미 만들어진 표의 데이터를 특정 기호나 너비로 나누는 방법을 소개합니다. 텍스트 나누기의 3단계를 설명합니다. 특정 구분 기호(구분자)로 텍스트를 나누는 방법과 너비(문자의 개수)로 나누는 방법을 설명하고 불필요한 부분은 버리고 특정 부분만을 가져오는 방법을 설명합니다.https://flylight.kr/원본이 변할 가능성이 있다면 역시 LEFT, RIGHT, MID 함수 중에 적당한 함수를 사용해야 합니다. 이것도 잘 모르신다면 아래 강좌를 참고해 주세요. LEFT, RIGHT, MID 함수 - 문자의 개수로 특정 문자를 추출하기 엑셀 LEFT, RIGHT, MID 함수의 사용법을 설명합니다. 각 함수의 인수를 정리하고 문자 개수로 특정 문자를 추출하는 방법을 소개합니다. 시작 문자에서 몇 개의 글자를 추출할지, 끝 문자 몇 개를 추출할지에 따라 LEFT와 RIGHT 함수 사용을 결정하고, 가져올 개수를 num_chars 인수로 사용한다는 것을 설명합니다. MID 함수는 시작할 위치 start_num 인수가 반드시 필요하다는 것을 알아봅니다.https://flylight.kr/ 지금에 경우는 MID 또는 RIGHT 함수를 사용해야겠네요. 그런데 문제가 있죠. MID 함수를 사용하려고 보니 @ 다음 문자의 위치를 특정할 수 없습니다. 그리고 @ 다음 몇 개의 문자를 가져와야 할지도 특정할 수 없습니다. RIGHT 함수 역시 뒤 문자 몇 개를 가져와야 할지 특정할 수 없습니다. 그렇다고 데이터 한 개씩 사용할 순 없습니다. 너무 많은 작업이 되겠죠. __adsens-adv1__ 문제를 확인했으니, 해결 방법을 알아보겠습니다. "@" 위치와 "@" 다음 문자 개수를 특정할 수 없다는 것 때문에 생긴 문제죠. 하지만 특정할 수 있다면, 그렇다면 모든 것이 해결되겠죠. 이번 강좌는 특정 문자의 위치(숫자)를 알아내는 함수 FIND와 SEARCH 함수를 알아보고 이하 문자 개수를 알아내기 위한 LEN 함수에 대해서도 알아보겠습니다. FIND특정 문자열에서(within_text)에서 찾고자하는 문자(find_text)를 찾아 처음 찾아진 위치(숫자)를 반환FIND(find_text, within_text, [start_num])find_text찾고자하는 문자. 대소문자를 구분하고 와일드 카드(* ? ~)는 사용 안됨 within_text찾고자하는 문자가 포함된 특정 문자열start_num[선택] within_text에서 검색을 시작할 문자 위치(숫자), 생략시 첫 문자(1)부터 검색SEARCH특정 문자열에서(within_text)에서 찾고자하는 문자(find_text)를 찾아 처음 찾아진 위치(숫자)를 반환SEARCH(find_text, within_text, [start_num])find_text찾고자하는 문자. 대소문자를 구분하지 않고 와일드 카드(* ? ~)도 사용 가능 within_text찾고자하는 문자가 포함된 특정 문자열start_num[선택] within_text에서 검색을 시작할 문자 위치(숫자), 생략시 첫 문자(1)부터 검색FIND, SEARCH 함수는 위와 같이 정리됩니다. 두 함수는 기능도, 인수도 모두 같습니다. 찾고자 하는 문자(find_text)의 영문 대소문자를 구분할 것인지, 와일드 카드를 사용할 것인지에 따라 FIND냐 SEARCH냐를 선택하시면 됩니다. FIND 함수는 엄격하고, SEARCH 함수는 유연하다 정도로 기억하면 되겠네요. 와일드 카드는 필터 편에서 알아본바 있습니다. 잘 모르시는 분들은 아래 강좌를 참고해 주세요. 엑셀 필터 ❸ 특정 문자 데이터 필터링 하기 - 와일드 카드 *엑셀에서 필터 사용 시 와일드 카드를 사용하는 방법을 소개합니다. 와일드 카드의 의미와 종류를 알아봅니다. 와일드 카드 중 *의 의미를 알아보고 이름의 첫 글자와 끝 글자로 필터링하는 방법을 설명합니다. 이름 중간 글자는 와일드 카드 *로 사용할 수 없는 이유를 설명합니다.https://flylight.kr/ 엑셀 필터 ❹ 와일드 카드 ?엑셀에서 필터 사용 시 와일드 카드 ?를 설명합니다. 와일드 카드 ?의 의미를 *와 비교하여 알아보고 3글자 이름에서 중간 글자를 필터링하는 방법을 소개합니다. 4글자 5글자에서 이름의 중간 글자 필터링은 다른 방법으로 해야 하는 이유를 설명합니다.https://flylight.kr/ 엑셀 필터 ❺ 와일드 카드 ~과 와일드 카드 종합 정리엑셀에서 필터 사용 시 와일드 카드 ~을 설명합니다. 와일드 카드 ~이 왜 필요한지 알아보고 어떻게 사용하는지 소개합니다. 와일드 카드 ~을 사용하여 필터링할 데이터에 * ? ~을 문자로 처리하여 필터링해 봅니다. 3가지 와일드 카드를 종합 정리합니다.https://flylight.kr/ __adsens-adv1__ 일단 원본 이메일에서 @의 위치를 찾아보겠습니다. 지금은 FIND와 SEARCH 중 아무거나 사용해도 되겠네요. FIND로 진행하겠습니다. 작성할 셀(K5)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =FIND(첫 번째 인수 힌트(find_text)를 확인하고 "@"를 입력합니다. => =FIND("@"수식에서 문자는 반드시 큰따옴표로 감싸야 한다는 것 주의해 주세요.쉼표로 구분, 두 번째 인수 힌트(within_text)를 확인하고 가져올 데이터를 참조하고 엔터로 K5셀을 완성합니다. => =FIND("@",E5)다시 완성된 K5셀을 클릭하고 나머지는 자동 채우기(우측 하단에서 클릭 드래그)로 완성합니다. 결과, @의 위치가 앞에서부터 글자 순서로 반환됩니다. 하지만 여전히 몇 개의 글자를 가져와야 하는지는 알 수 없습니다. 이걸 알기 위해서 하나의 함수를 더 알아야 합니다. LEN 함수입니다. LENtext 문자열의 전체 문자 수를 반환합니다.LEN(text)text문자 수를 확인하려는 대상 문자열. 공백도 문자로 계산됨 함수 정리는 위와 같습니다. LEN은 LENGTH의 약자로 길이를 의미하며 인수를 하나만 갖는 아주 단순한 함수입니다. 전체 문자 수를 알 수 있고 "@"의 위치를 알 수 있으니, "@" 다음 문자 수는, 전체 문자 수에서 "@"까지의 문자 수를 빼주면 되겠죠. (전체 문자 수 - @ 위치) K5셀을 클릭하여 다시 선택합니다. => =FIND("@",E5)수식 입력줄에서 FIND 함수 앞에 LEN 함수명을 추가 작성합니다. => =LEN(FIND("@",E5)LEN 함수의 인수 힌트(text)를 확인하고 가져올 값을 참조한 후 괄호를 닫아 LEN 함수를 완성합니다. => =LEN(E5)FIND("@",E5)작성된 LEN 함수 뒤에 -(빼기)를 입력하고 엔터를 눌러 K5셀을 완성합니다. => =LEN(E5)-FIND("@",E5)나머지 데이터 확인을 위해 다시 완성된 K5셀을 클릭하고 자동 채우기(우측 하단에서 클릭 드래그)를 진행합니다. 결과, @ 다음 문자열의 개수가 반환되었습니다. __adsens-adv1__ 이제 남은 것은 실제 추출할 함수, MID나 RIGHT 중 하나를 사용하면 끝입니다. 간단하게 RIGHT 함수를 사용하겠습니다. K5셀을 클릭하여 다시 선택합니다. => =LEN(E6)-FIND("@",E6)수식 입력줄에서 LEN 함수 앞에 RIGHT 함수명을 추가 작성합니다. => =RIGHT(LEN(E6)-FIND("@",E6)RIGHT 함수의 인수 힌트(text)를 확인하고 가져올 값을 참조한 후 쉼표를 입력합니다. => =RIGHT(E6,LEN(E6)-FIND("@",E6)RIGHT 함수의 두 번째 인수 num_chars는 이미 작성한 수식입니다. RIGHT 함수를 완성하기 위해 수식 마지막에 닫힌 괄호를 입력하고 엔터를 누릅니다. => =RIGHT(E6,LEN(E6)-FIND("@",E6))함수 안에 함수를 중첩 사용할 경우 그냥 엔터는 에러가 발생한다고 했습니다. 반드시 닫힌 괄호를 작성하고 엔터를 눌러 주세요.마지막으로 다시 완성된 K5셀을 클릭하고 자동 채우기(우측 하단에서 클릭 드래그)를 진행합니다. 결과, 원본 이메일에서 도메인만 추출되었습니다. RIGHT 함수 대신 MID 함수를 사용해도 되겠죠. 이건 직접 해 보시길 바랍니다. 힌트, MID 함수의 text와 num_chars 인수는 지금 한 RIGHT 함수의 text와 num_chars 인수와 동일하고 start_num 인수는 @ 다음 위치입니다. 수식만 확인하겠습니다. 주의하실 것을 start_num 인수입니다. "@"부터가 아니라 "@" 다음 문자부터라는 것이 핵심이죠. MID 함수로는 좀 복잡해 보입니다. RIGHT를 사용하는 것이 좋겠네요. LEN FIND SEARCH.xlsx(13.1 Kb)save_alt __adsens-adv1__2025.09.25 / 09:47 홀짝 ISODD, ISEVEN 함수, 나누기의 몫과 나머지 QUOTIENT, MOD 함수지난 강좌에서 주민등록번호 뒷자리의 첫 숫자를 반환하여 성별(숫자)까지 반환했습니다. 그런데 그 첫 숫자는 사실 몇 가지 정보가 더 있습니다. 대부분 1과 2, 3과 4는 아실 것 같습니다. 1900년대 남자는 1, 여자는 2로 나타내고 2000년대 남자는 3, 여자는 4로 나타내죠. 그런데 5와 6, 7과 8 그리고 9와 0도 존재합니다. 총 10개의 숫자가 사용될 수 있습니다. 중요한 얘기는 아니지만 신기한 얘기라서 알려드리겠습니다. 숫자 설명숫자 설명 11900년대 출생 남자21900년대 출생 여자32000년대 출생 남자42000년대 출생 여자 5 1900년대 출생 외국인 남자61900년대 출생 외국인 여자 72000년대 출생 외국인 남자82000년대 출생 외국인 여자 91800년대 출생 남자01800년대 출생 여자 즉, 출생년대와 내·외국인 정보까지 있다는 것이죠. 그리고 홀수는 남자, 짝수는 여자라는 것은 모두 같습니다. 예제 파일을 보겠습니다. 성별 숫자를 확인하면 임청하는 2000년대 외국인 여자라는 것을 알 수 있습니다. __adsens-adv1__ 어쨌든 그걸 모두 알고 싶은 것은 아니고 단순히 성별만 알고 싶은 것이니까 성별 숫자가 홀수인지 짝수인지를 확인해 홀수면 "남자", 짝수면 여자로 표시하고 싶습니다. 이 경우 IF 함수를 여러 번 사용하던가 IF와 OR 함수를 같이 사용하면 만들 수 있습니다. IF와 OR 함수는 이미 알아본 내용이니, 궁금하시면 아래 강좌를 확인해 주시기 바랍니다. IF 함수 ❸ IF의 짝꿍, 논리 함수 AND와 OR엑셀의 IF 함수 안에 사용하는 논리 함수 AND와 OR에 관해 알아봅니다. AND와 OR 함수는 단독 사용보다는 IF의 짝꿍처럼 같이 사용된다는 것을 확인하고 두 함수의 공통점과 차이점을 설명합니다.https://flylight.kr/ 하지만 위 두 함수를 사용할 경우의 수가 여러 개가 되기 때문에 역시 수식이 지저분해질 수밖에 없습니다. 수식이 지저분해지면 에러가 날 확률은 높아질 수밖에 없겠죠. 그래서 좀 더 단순하고 직관적인 함수를 사용할 필요가 있는데, 바로 ISODD, ISEVEN 함수입니다. ISODD숫자가 홀수면 TRUE를, 짝수면 FALSE를 반환합니다.ISODD(number)number홀수인지 짝수인지 검정할 숫자 ISEVEN숫자가 짝수면 TRUE를, 홀수면 FALSE를 반환합니다.ISEVEN(number)number홀수인지 짝수인지 검정할 숫자간단하죠. 인수 number가 홀수냐 짝수냐에 따라 참과 거짓을 반환하는 함수들입니다. 참고로 엑셀에서 IS~로 시작하는 함수들이 꽤 있는데 대부분 있냐, 없냐, 맞냐, 틀리냐를 판단하는 함수입니다. 즉, 결과로 TRUE나 FALSE를 반환하는 함수들이죠. ISODD, ISEVEN도 마찬가지입니다. ODD는 홀수가, EVEN은 짝수가 맞냐 틀리냐를 반환하는 함수입니다. 하지만 반환할 것은 맞냐 틀리냐가 아니라 "남자"냐 "여자"냐 입니다. 그러니 TRUE냐 FALSE냐에 따라 반환할 값을 정해야겠죠. IF함수는 사용해야 한다는 것입니다. __adsens-adv1__ 그래서 위 결과를 반환하기 위해선, 주민등록번호에서 MID 함수로 성별(숫자)를 걸러내고 (이건 이전 강좌에서 이미 한 내용입니다.)걸러낸 숫자가 홀수인지 짝수인지를 ISODD 또는 ISEVEN 함수로 판단판단 결과 참(TRUE), 거짓(FALSE)에 따라 IF 함수로 "남자" 또는 "여자"를 반환하는 3단계의 순서를 거쳐야 합니다. ❶은 진행된 상태니까 ❷부터 해 보겠습니다. ❶를 모르시는 분들은 이전 강좌를 참고하시기 바랍니다. LEFT, RIGHT, MID 함수 - 문자의 개수로 특정 문자를 추출하기 엑셀 LEFT, RIGHT, MID 함수의 사용법을 설명합니다. 각 함수의 인수를 정리하고 문자 개수로 특정 문자를 추출하는 방법을 소개합니다. 시작 문자에서 몇 개의 글자를 추출할지, 끝 문자 몇 개를 추출할지에 따라 LEFT와 RIGHT 함수 사용을 결정하고, 가져올 개수를 num_chars 인수로 사용한다는 것을 설명합니다. MID 함수는 시작할 위치 start_num 인수가 반드시 필요하다는 것을 알아봅니다.https://flylight.kr/ 성별의 첫 셀(J5)을 클릭하여 선택합니다. => =MID(D5,8,1)수식 입력줄에서 MID로 반환된 성별(숫자) 값이 홀수인지 확인하기 위해 ISODD를 MID 앞에 작성합니다. => =ISODD(MID(D5,8,1)이때 이미 작성된 수식(MID(D5,8,1))이 ISODD 함수의 number 인수가 됩니다.ISODD 함수를 완성하기 위해 수식 마지막에 닫힌 괄호를 입력하고 엔터를 눌러 셀을 완성합니다. => =ISODD(MID(D5,8,1))수식이 하나일 경우는 그냥 엔터를 눌러도 되지만 지금처럼 함수가 중첩되면 에러가 발생하니 반드시 닫힌 괄호를 입력한 후에 엔터를 눌러야 합니다.나머지도 결과를 확인하기 위해 다시 J5셀을 클릭후 자동 채우기(우측 하단에서 클릭 드래그) 합니다.=> 결과 홀수는 TRUE로, 짝수는 FALSE로 반환됩니다. 이렇게 함수 안에 함수를 사용해야 하는 경우는 항상 닫힌 괄호에 신경 써야 합니다. 그리고 반드시 ISODD 함수를 사용해야 하는 것은 아닙니다. ISEVEN 함수를 사용해도 됩니다. 그렇다면 TRUE와 FALSE는 반대의 결과가 되었겠죠. IF 함수를 추가 사용할 것이기 때문에 일단 구분만 되면 됩니다. __adsens-adv1__ 이제 TRUE의 경우는 "남자", FALSE는 "여자"로 바꾸기 위해 최종 IF 함수를 추가 사용합니다. 성별의 첫 셀(J5)을 다시 클릭하여 선택합니다. => =ISODD(MID(D5,8,1))수식 입력줄에서 작성된 수식을 나누기 위해 ISODD 앞에 IF 함수를 작성합니다. => =IF(ISODD(MID(D5,8,1))이때 이미 작성된 수식(ISODD(MID(D5,8,1)))은 IF 함수의 logical_test 인수가 됩니다.쉼표로 구분, IF 함수 두 번째 인수 힌트(value_if_true)를 확인하고 "남자"로 작성합니다. => =IF(ISODD(MID(D5,8,1)), "남자"쉼표로 구분, IF 함수 세 번째 인수 힌트(value_if_false)를 확인하고 "여자"로 작성한 후 IF 함수 종료를 위해 닫힌 괄호를 입력하고 엔터로 셀을 완성합니다. => =IF(ISODD(MID(D5,8,1)), "남자","여자")나머지도 결과를 확인하기 위해 다시 J5셀 클릭 후 자동 채우기(우측 하단에서 클릭 드래그) 합니다. => 결과 TRUE는 남자로, FALSE는 여자로 반환됩니다. 정리하면, 그림처럼 각 단계의 함수가 다음 단계의 인수로 사용된 것입니다. 그리고 앞으로 이런 식의 함수 사용을 많이 경험하시게 될 겁니다. 함수에 익숙하지 않으신 분들은 지금처럼 먼저 사용될 함수를 작성한 후 다음 단계 함수로 감싸는 구조로 사용하시면 좀 더 직관적으로 함수를 사용할 수 있습니다. 그리고 어느 정도 훈련이 된 다음에는 바로 마지막 단계(=IF~)로 진행할 수 있게 될 것입니다. 그땐 수식 작성 순서가 로직의 반대 순서가 되겠죠. 위의 경우 ISODD 함수를 사용했지만 ISEVEN 함수를 사용해도 됩니다. 그 경우에는 IF 함수에서 "남자", "여자"의 위치가 바뀌어야겠죠. __adsens-adv1__ ISODD와 ISEVEN 함수를 알려드렸지만 좀 더 확장성이 좋고 비교할 만한 함수가 있어서 추가 설명하겠습니다. 바로 MOD 함수입니다. MOD 함수 설명을 위해 QUOTIENT 함수도 같이 설명해야겠군요. 별거 없습니다. 수학 시간에 배운 나누기의 몫과 나머지를 구하는 함수입니다. 예제 파일에서 "몫과 나머지" 시트를 확인해 주세요. 위 예제에서 일반적인 나누기의 경우 몫과 나머지를 분리하지 않고 무한소수로 나타냅니다. 하지만 몫과 나머지를 구해야 할 경우도 있죠. 이 경우 몫을 반환하는 함수가 QUOTIENT 함수이고 나머지를 반환하는 함수가 MOD 함수입니다. MOD는 MODULO의 약자로 각각 나누기의 몫(QUOTIENT), 나누기의 나머지(MODULO)라는 의미라고 하네요. QUOTIENTnumerator를 denominator로 나눈 몫의 정수 부분을 반환합니다.QUOTIENT(numerator, denominator)numerator나눌 수(피제수)denominatornumerator를 나누는 수(제수) MODnumber를 divisor로 나눈 나머지를 반환합니다. MOD(number, divisor)number나눌 수(피제수)divisornumber를 나누는 수(제수) 함수의 정리는 위와 같습니다. 아쉽게도 함수의 인수명이 다르네요. 어쨌든 나눌 수와 나누는 수를 인수로 갖는다는 것은 동일합니다. __adsens-adv1__ 예제 파일의 결과를 반환해 보겠습니다. 나누기는 별거 없죠. B3셀을 C3셀로 나누면 끝입니다. 이건 직접 해 보시고요 몫부터 보겠습니다. 작성할 셀(E3)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =QUOTIENT(첫 번째 인수 힌트(numerator)를 확인하고 나눌 수를 가진 셀(B3)을 참조합니다. => =QUOTIENT(B3쉼표로 구분, 두 번째 인수 힌트(denominator)를 확인하고 나누는 수를 가진 셀(C3)을 참조합니다. => =QUOTIENT(B3,C3함수가 하나이므로 최종 엔터(닫힌 괄호 자동 생성 후 셀 완성) => =QUOTIENT(B3,C3) 다음, 나머지 작성할 셀(F3)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =MOD(첫 번째 인수 힌트(number)를 확인하고 나눌 수를 가진 셀(B3)을 참조합니다. => =MOD(B3쉼표로 구분, 두 번째 인수 힌트(divisor)를 확인하고 나누는 수를 가진 셀(C3)을 참조합니다. => =MOD(B3,C3함수가 하나이므로 최종 엔터(닫힌 괄호 자동 생성 후 셀 완성) => =MOD(B3,C3)결과 몫과 나머지가 정상 반환됩니다. 함수 설명은 여기까지입니다. __adsens-adv1__ 그럼, MOD 함수를 ISODD나 ISEVEN과 어떻게 비교할 수 있을까요? MOD 함수의 divisor 인수를 2로 사용하면 됩니다. 이 경우 0 아니면 1이라는 결과만 반영되겠죠. 즉 두 가지 결과가 나온다는 것입니다. 0이면 "여자", 1이면 "남자"가 되겠죠. 이건 위에서 했던 것처럼 IF 함수로 처리하면 됩니다. 다음, 확장성에 좋다고 한 것에 관해 설명하겠습니다. ISODD나 ISEVEN 함수는 홀수냐 짝수냐만 판단하기 때문에 2가지 경우만 사용할 수밖에 없습니다. 하지만 MOD 함수의 divisor 인수를 2가 아니라 3으로 사용한다면, 3가지 수(0, 1, 2)가 반환됩니다. 4로 사용하면 (0, 1, 2, 3) 4가지 수가 반환될 것이고요. 즉 divisor로 사용한 수만큼 경우의 수가 생긴다는 것입니다. 이렇게 MOD 함수를 사용하면 나머지 값에 따라 다른 결과를 반영하는 수식을 만들 수 있습니다. 예를 들어 어느 여행사에서 4일 여행은 강원도로, 5일 여행은 부산으로, 6일 여행은 제주도로 간다고 가정해 보겠습니다.이 경우 MOD 함수를 사용하고 여행일을 3(divisor)으로 나누면 해당 여행일에 따라 자동으로 여행지(강원, 부산, 제주)를 분리할 수 있습니다. 1일 경우 강원, 2일 경우 부산, 0일 경우 제주로 분리하면 되겠죠. 여행일에 따른 여행지가 또 있다면 divisor 인수를 4, 5, ... 로 조정하여 경우의 수를 더 만들면 됩니다. ISODD나 ISEVEN으로 할 수 없는 것들이죠. 또 다른 예로, 위 예제 성별(숫자)에서 2000년대 여성만을 구분할 수도 있습니다. 2000년대 여성은 4(내국인) 또는 8(외국인)이죠. 4로 나누었을 때 나머지가 0인 경우입니다. 같은 방법으로 1900년대 남성만을 구분할 수도 있겠죠. 1900년대 남성은 1(내국인) 또는 5(외국인)입니다. 4로 나누었을 때 나머지가 1인 경우입니다. 모두 MOD 함수를 사용하고 divisor 인수를 4로 사용한 후 나오는 결과에 따라 구분하면 되는 것이죠. 그래서 성별 ISODD나 ISEVEN 대신 MOD 함수를 사용한다면 수식은, 위와 같이 됩니다. IF 함수의 logical_test 인수를 MOD(MID(D5,8,1),2)=1로 하면, value_if_true 인수를 "남자"로, 즉 ISODD 함수와 동일해지며, logical_test 인수를 MOD(MID(D5,8,1),2)=0으로 하면, value_if_true 인수를 "여자"로, 즉 ISEVEN 함수와 동일해집니다. __adsens-adv1__ 추가로 한 가지 더 말씀드리겠습니다. IF 함수뿐 아니라 TRUE(참)와 FALSE(거짓)를 따지는 논리연산에서 TRUE는 숫자 1로, FALSE는 숫자 0으로 사용할 수 있습니다. 즉, 위와 같이 logical_test 인수가 1과 0으로 반환되는 경우라면 굳이 "=1"을 추가하실 필요는 없습니다. 1은 TRUE고 0은 FALSE기 때문이죠. 그래서 위 수식은, 위와 같이 "=1"을 삭제하여 조금 더 단순하게 표현할 수 있습니다. ISODD ISEVEN QUOTIENT MOD.xlsx(14.2 Kb)save_alt2025.09.23 / 09:42LEFT, RIGHT, MID 함수 - 문자의 개수로 특정 문자를 추출하기 특정 문자를 추출하는 방법은 이미 기초 강좌에서 일부 소개했습니다. "빠른 채우기"와 "텍스트 나누기"가 있었죠. 하지만 함수를 사용하면 역시 원본이 바뀜에 따라 결과도 반영되는 자동화의 장점을 살릴 수 있습니다. 원본이 변경될 소지가 있다면, 좀 불편하지만 이제 알아볼 LEFT, RIGHT, MID 함수를 사용하는 편이 좋습니다. "빠른 채우기"와 "텍스트 나누기"를 모르신다면 이 것들도 효율적인 방식이니 꼭 보시길 바랍니다. 특정 문자 추출하기 ❶ 빠른 채우기이미 만들어진 표의 데이터를 기반으로 하여 사용자가 입력한 패턴대로 빈 셀을 빠르게 완성해 주는 빠른 채우기 기능에 관해 설명합니다. 빠른 채우기를 해야 하는 상황을 소개하고 빠른 채우기를 할 수 있는 표의 상태를 만들어 봅니다. 여러 가지 상황으로 빠른 채우기를 진행해 보고 빠른 채우기를 할 수 없는 상태를 설명합니다.https://flylight.kr/ 특정 문자 추출하기 ❷ 텍스트 나누기이미 만들어진 표의 데이터를 특정 기호나 너비로 나누는 방법을 소개합니다. 텍스트 나누기의 3단계를 설명합니다. 특정 구분 기호(구분자)로 텍스트를 나누는 방법과 너비(문자의 개수)로 나누는 방법을 설명하고 불필요한 부분은 버리고 특정 부분만을 가져오는 방법을 설명합니다.https://flylight.kr/ __adsens-adv1__ 예제 파일부터 확인하겠습니다. 예제 파일 좌측 "다팔아 사원 목록"에서 필요한 데이터를 찾아 우측 표에 작성하려 합니다. 직원명에서 성을, 주민등록번호에서 뒷자리를 감춘 형태만, 사원번호에서 숫자만, 주민등록번호에서 성별만 그리고 이메일에서 ID를 제외한 도메인만 찾으려는 것입니다. 모두 LEFT, RIGHT, MID 함수 중 하나를 사용하긴 해야 하지만 성별과 도메인은 다른 함수가 필요하겠네요. 이번에는 성, 주민번호(보안), 사번(숫자)까지 알아보고 주민등록번호에서 성별을 숫자로 찾는 방법까지만 설명하겠습니다. LEFT와 RIGHT 함수가 간단하니, 이들부터 함수 정리하겠습니다. LEFT텍스트 문자열의 첫 번째 문자부터 지정한 문자 수만큼 문자를 반환합니다.LEFT(text, [num_chars])text추출하려는 문자가 들어 있는 텍스트 문자열 또는 참조.[num_chars][선택] 추출할 문자 개수. 생략 시 1로 간주RIGHT텍스트 문자열의 마지막 문자부터 지정한 문자 수만큼 문자를 반환합니다.RIGHT(text, [num_chars])text추출하려는 문자가 들어 있는 텍스트 문자열 또는 참조.[num_chars][선택] 추출할 문자 개수. 생략 시 1로 간주별거 없습니다. 시작하는 문자 몇 개를 반환할 것인지, 끝나는 문자 몇 개를 반환할 것인지에 따라 LEFT, RIGHT를 결정하면 되고, 거기서 "몇 개"라는 것이 [num_chars] 인수가 되겠습니다. __adsens-adv1__ 성을 작성할 셀(G5)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =LEFT(첫 번째 인수 힌트(text)를 확인하고 참조로 값을 가져옵니다. => =LEFT(C5두 번째 인수를 작성할 순서지만 1글자만 가져오고 싶다면 생략해도 됩니다. 2개 이상일 경우만 작성하면 된다는 얘기입니다.더 이상 인수가 없고 함수가 하나이므로 그냥 엔터(닫힌 괄호 자동 생성 후 셀 완성) => =LEFT(C5)완성된 G5셀을 클릭하고 나머지는 자동 채우기(우측 하단에서 클릭 드래그)로 완성합니다. 간단하죠. 주민번호(보안)도 만들겠습니다. 앞자리는 가져오고 뒷자리는 "*"로 표시하겠습니다. 작성할 셀(H5)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =LEFT(첫 번째 인수 힌트(text)를 확인하고 참조로 값을 가져옵니다. => =LEFT(D5쉼표로 구분, 두 번째 인수 힌트(num_chars)를 확인하고 가져올 문자 개수(6)를 입력하고 닫힌 괄호까지 작성합니다. => =LEFT(D5,6)엔터를 입력하면 셀이 완성되어 버리므로 닫힌 괄호를 입력하고 일단 함수만 완성합니다. 더 작성할 내용이 남았으니, 엔터를 입력하여 셀을 완성하지 않는 것입니다.더 작성할 내용은 주민번호 뒷자리를 *로 처리할 내용입니다. 문자를 이어주기 위해 & 기호를 사용하고 "-*******"를 입력합니다. => =LEFT(D5,6)&"-*******"문자는 큰따옴표로 감싸야 한다는 것을 주의해 주세요. 셀이 완성되었으니, 엔터를 눌러줍니다. => 주민번호 앞자리는 반영되고 뒷자리는 * 처리됩니다.다시 완성된 H5셀을 클릭하고 나머지는 자동 채우기(우측 하단에서 클릭 드래그)로 완성합니다. 결과, 주민번호(보안)가 정상 작성됩니다. & 기호 사용법을 모르신다면 아래 강좌를 참고해 주세요. 수식에서 문자를 연결하는 방식으로, 꼭 알고 있어야 하는 내용입니다. 수식에서 문자, 숫자, 참조의 연결 &엑셀 수식에서 값을 연결하는 방법을 설명합니다. 수식에서 숫자와 문자를 혼합하여 사용하면 어떤 결과가 나오는지 확인합니다. 숫자와 문자를 구분하고 & 기호 연결하면 수식에서도 문자를 사용할 수 있다는 것을 확인합니다. 숫자, 문자, 참조를 & 기호로 연결해 보고 문자의 경우 반드시 큰따옴표를 사용해야 한다는 것을 알아봅니다.https://flylight.kr/ __adsens-adv1__ 다음, 사번(숫자)입니다. 이 녀석은 원본 사원번호에서 끝 3자리를 반환해야겠습니다. RIGHT 함수를 써야겠죠. 작성할 셀(I5)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =RIGHT(첫 번째 인수 힌트(text)를 확인하고 참조로 값을 가져옵니다. => =RIGHT(B5쉼표로 구분, 두 번째 인수 힌트(num_chars)를 확인하고 가져올 문자 개수(3)을 입력합니다. => =RIGHT(B5, 3엔터(닫힌 괄호 자동 생성 후 셀 완성) => =RIGHT(B5, 3)다시 완성된 I5셀을 클릭하고 나머지는 자동 채우기(우측 하단에서 클릭 드래그)로 완성합니다. 결과, 사원번호의 뒷자리 숫자만 정상 반환됩니다. RIGHT 함수도 LEFT 별반 다르지 않습니다. 가져오는 것이 text 인수의 시작 부분인지 끝 부분인지의 차이일 뿐이라는 것이죠. __adsens-adv1__ 다음, 성별을 알기위해선 주민번호 뒷자리의 첫 숫자를 알아 와야 합니다. 그 첫 숫자가 홀수면 "남자", 짝수면 "여자"입니다. 이건 LEFT와 RIGHT만으로는 알 수 없습니다. 시작에서 몇 개, 끝에서 몇 개는 반환할 수 있지만 중간에서 몇 개를 반환할 수는 없기 때문이죠. 예상하셨겠지만 이럴 때 사용하는 함수가 MID 함수입니다. MID텍스트 문자열의 지정된 위치로부터 지정된 수만큼 문자를 반환MID(text, start_num, num_chars)text추출하려는 문자가 들어 있는 텍스트 문자열 또는 참조.start_numtext에서 추출한 첫 문자의 위치. (시작하는 첫 문자 위치는 1)num_chars추출할 문자 개수. 주의! 선택사항이 아니므로 반드시 작성. 1보다 작으면 오류 발생 함수 정리는 위와 같습니다. LEFT, RIGHT와 동일한데, 중간에 시작할 문자의 위치인 start_num 인수가 추가로 필요 합니다. 그리고 num_chars 인수는 LEFT, RIGHT 함수와 다르게 1개라도 무조건 입력해야 한다는 점이 다릅니다. 선택사항이 아니라 필수사항이란 것이죠. 작성할 셀(J5)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =MID(첫 번째 인수 힌트(text)를 확인하고 참조로 값을 가져옵니다. => =MID(D5쉼표로 구분, 두 번째 인수 힌트(start_num)를 확인하고 가져올 문자의 시작 위치(8)를 입력합니다. => =MID(D5,8쉼표로 구분, 세 번째 인수 힌트(num_chars)를 확인하고 가져올 문자 개수(1)를 입력합니다. => =MID(D5,8,1엔터(닫힌 괄호 자동 생성 후 셀 완성) => =MID(D5,8,1)다시 완성된 J5셀을 클릭하고 나머지는 자동 채우기(우측 하단에서 클릭 드래그)로 완성합니다. 결과, 성별까지 주민등록번호의 숫자에서 추출됩니다. MID 함수도 LEFT, RIGHT 함수와 유사하게 사용할 수 있다는 것을 확인할 수 있습니다. 중간부터 가져올 것이니 start_num 이 반드시 필요하다는 것만 기억하시면 되겠습니다. __adsens-adv1__ 그런데 성별은 이왕이면 숫자가 아니라 "남"과 "여"로 나타나는 것이 좋겠네요. 그 방법은 다음 강좌에서 알아보겠습니다. 추가로 한 가지 더, 이렇게 함수화하면 원본이 바뀌었을 경우 결과도 자동 변경된다는 것 기억하시죠? 위 그림처럼 원본이 바뀌더라도 결과가 자동 반영되므로 "빠른 채우기"나 "텍스트 나누기"처럼 수정하는 해야하는 작업을 생략할 수 있게됩니다. LET RIGHT MID.xlsx(12.4 Kb)save_alt 2025.09.22 / 13:16D~ 함수(DSUM, DAVERAGE, DCOUNT, DMAX, DMIN) - 데이터베이스에서 조건 기능 추가하기이번에 알려드릴 함수는 사용법은 간단하나 개념적으론 어려운 함수입니다. 그래도 기본 함수에서 확장한 함수들(~IF, ~IFS)을 알아보았으니 지금 알아보는 것이 맞을 것 같습니다. D~ 함수도 ~IF나 ~IFS 함수처럼 기본 기능에 조건 기능이 추가된 함수입니다. 여기서 "D"는 DATABASE의 첫 글자입니다. 통상적으로 DATABASE는 통합·관리되는 데이터의 집합이자 저장소를 말합니다. 뭔 말인지 어렵죠. 설명하자면 좀 복잡합니다. 하지만 여기에서 "D"는 통상적인 개념의 데이터베이스가 아니라 데이터베이스 형식으로 만들어진 표를 의미하는 것이니 그다지 어렵진 않습니다. 레이블과 레코드로만 이루어진 표를 의미합니다. 레이블과 레코드는 이미 기초 강좌에서 설명한 바 있습니다. 잘 모르겠다면 아래 강좌를 참고해 주세요. 셀 서식 - 레이블과 레코드, 구분선 넣기엑셀에서 작성한 표에서 레이블과 레코드가 무엇인지 설명합니다. 셀 서식 대화상자 테두리 탭에서 레이블과 레코드에 구분선을 넣어봅니다.https://flylight.kr/그리고 이 D~ 함수는 엑셀의 여러 가지 기능의 복잡하게 섞여 있는 형태입니다. 기능상으로는 ~IFS 함수와 유사하지만, 함수의 인수는 고급 필터의 조건 범위, VLOOKUP 함수의 table_array와 k가 섞여 있는 형태입니다. 다시 말해 이 함수를 잘 이해하기 위해서는 고급 필터, VLOOKUP 함수, ~IFS 함수의 이해하고 있어야 한다는 얘기입니다. __adsens-adv1__ 이미 다 설명해 드린 내용이지만 잘 모르신다면 아래 강좌를 확인하고 돌아와 주시기 바랍니다. ~IFS 함수 (SUMIFS, AVERAGEIFS, COUNTIFS, MAXIFS, MINIFS) - 다중 조건 기능 추가하기엑셀 함수 중 뒤에 IFS가 붙은 함수(SUMIFS, AVERAGEIFS, COUNTIFS, MAXIFS, MINIFS)에 대해 설명합니다. ~IFS로 끝난 함수는 원래 함수의 기능에 다중 조건 기능이 추가된 것임을 알아봅니다. 1개의 조건이 추가될 때마다 함수 인수 2개(criteria_range와 criteria)가 추가 되는 이유를 설명합니다. ~IF 함수와 비교하여 인수들의 위치를 알아봅니다.https://flylight.kr/ VLOOKUP 함수 ❶ 특정 데이터 찾기엑셀 VLOOKUP 함수의 사용법을 소개합니다. VLOOKUP 함수의 기능과 인수를 정리합니다. 사람들이 특정 값을 찾는 방법을 논리적으로 따져보고 실제 VLOOKUP 함수의 인수와 비교해 봅니다. VLOOKUP 함수를 실제로 적용해 보고 자동 채우기를 할 경우 어떤 문제가 있는지 확인합니다. 함수로 작성된 셀의 자동화 결과를 확인하고 장점을 알아봅니다.https://flylight.kr/ 엑셀 필터 ❽ 고급 필터 ① 기본 사용법(목록 범위, 조건 범위, 복사 위치)엑셀 고급 필터 기본 사용법을 설명합니다. 고급 필터 사용 시 목록 범위, 조건 범위, 복사 위치가 무엇인지 알아보고 작성하는 방법을 소개합니다. 복사 위치에 따른 3가지 사용법을 설명하고 복사 위치에 만든 필터링 결과를 삭제하는 방법과 고급 필터 사용 시 주의해야 하는 점을 소개합니다.https://flylight.kr/고급 필터는 위에서 하나의 강좌만 연결했지만, 가능한 5가지 강좌를 모두 보시고 오시는 것이 좋습니다. 고급 필터의 핵심은 조건 범위를 다양하게 만들 수 있는지이고 알아볼 D~ 함수 역시 동일한 방법으로 조건 범위를 만들기 때문에 다양하게 만들 수 있는 개념을 꼭 정립하시길 바랍니다. 물론 알고 있다면 아래 내용으로 바로 들어가셔도 좋습니다. 일단 D~함수를 왜 사용하는지부터 설명하겠습니다. 예제 파일을 열어 주세요. 예제는 ~IF 함수부터 사용하고 있는 문서입니다. ~IFS 함수로 "지역이 경기이고 제품분류가 전자제품인 것의 금액 합"까지 알아보았었죠. 그러데 "지역이 경기이거나 제품분류가 전자제품인 것의 금액 합"은 구할 수 있나요? ~IFS 함수로는 불가능합니다. 모든 조건에 만족하는 것은 구할 수 있지만 한 가지 조건에만 만족하는 것들의 합은 구할 수 없습니다. 즉 AND 조건은 가능하지만, OR 조건은 할 수 없다는 것입니다. 해결 방법이 없는 것은 아닙니다. 이 경우라면 지역이 경기인 것의 합을 SUMIF로, 제품분류가 전자제품인 것의 합은 또 SUMIF로 반환하고 값을 더하는 방법을 사용하면 되겠죠. 하지만 수식은 길어질 것입니다. 3가지, 4가지, ... 조건이 늘어난다면 수식은 굉장히 길어질 것이고 수식이 길어지는 것은 오타나 참조를 잘못할 확률도 높아진다는 얘기입니다. 이걸 간편하게 해주는 함수가 DSUM 함수입니다. 기본 함수들 AVERAGE, COUNT, MAX, MIN도 모두 앞에 "D"를 붙여 사용할 수 있습니다. 필터 편에서도 같은 얘기를 했습니다. 필터 역시 서로 다른 항목의 경우 AND 조건은 가능, OR 조건은 불가능했었죠. "지역이 경기이고 제품분류가 전자제품인 것"은 필터링할 수 있지만 "지역이 경기이거나 제품분류가 전자제품인 것"은 일반 필터로는 할 수 없었습니다. 고급 필터를 사용해야 했습니다. 고급 필터의 조건 범위를 만들어야 가능했죠. D~ 함수도 같습니다. 조건 범위가 반드시 필요하다는 얘기입니다. 조건 범위를 만들겠습니다. OR 조건으로 만들어져야 하고 항목은 두 개이므로, 위 그림처럼 만들어야 합니다. "빈 셀은 모든 것을 의미한다." 했습니다. 어렵다면 역시 위에서 언급한 고급 필터 편을 확인해 주세요. __adsens-adv1__ 조건 범위를 만들었다면 모든 준비가 끝났습니다. 각 함수들을 정리하겠습니다. DSUM데이터베이스에서 조건 범위의 조건과 일치하는 레코드의 필드(열)에 있는 숫자의 합계 반환DSUM(database, field, criteria)database모든 조건의 항목과 찾을 값을 포함한 범위로 반드시 레이블과 레코드로 이루어진 범위fielddatabase의 레이블명 또는 database의 열 순서criteria조건 범위 DAVERAGE데이터베이스에서 조건 범위의 조건과 일치하는 레코드의 필드(열)에 있는 숫자의 평균 반환DAVERAGE(database, field, criteria)database모든 조건의 항목과 찾을 값을 포함한 범위로 반드시 레이블과 레코드로 이루어진 범위fielddatabase의 레이블명 또는 database의 열 순서criteria조건 범위 DMAX데이터베이스에서 조건 범위의 조건과 일치하는 레코드의 필드(열)에 있는 최대값 반환DMAX(database, field, criteria)database모든 조건의 항목과 찾을 값을 포함한 범위로 반드시 레이블과 레코드로 이루어진 범위fielddatabase의 레이블명 또는 database의 열 순서criteria조건 범위 DMIN데이터베이스에서 조건 범위의 조건과 일치하는 레코드의 필드(열)에 있는 최소값 반환DMIN(database, field, criteria)database모든 조건의 항목과 찾을 값을 포함한 범위로 반드시 레이블과 레코드로 이루어진 범위fielddatabase의 레이블명 또는 database의 열 순서criteria조건 범위DCOUNT데이터베이스에서 조건 범위의 조건과 일치하는 레코드의 필드(열)에 있는 숫자 셀의 개수 반환DCOUNT(database, field, criteria)database모든 조건의 항목과 찾을 값을 포함한 범위로 반드시 레이블과 레코드로 이루어진 범위fielddatabase의 레이블명 또는 database의 열 순서criteria조건 범위DCOUNTA데이터베이스에서 조건 범위의 조건과 일치하는 레코드의 필드(열)에 있는 비어있지 않는 셀의 개수 반환DCOUNTA(database, field, criteria)database모든 조건의 항목과 찾을 값을 포함한 범위로 반드시 레이블과 레코드로 이루어진 범위fielddatabase의 레이블명 또는 database의 열 순서criteria조건 범위 기본 함수 5가지와 추가로 DCOUNTA까지 정리했습니다. COUNT와 COUNTA는 숫자 셀만 셀 것인지, 문자도 셀 것인지의 차이였죠. 함수 정리라서 모든 것을 정리했지만 보셨듯이 인수들이 모두 같습니다. 함수의 기능은 모두 기본 함수의 기능입니다. 조건 기능만이 추가 되었는데 그 조건 기능을 고급 필터의 조건 범위로 사용한다는 것입니다. __adsens-adv1__ 다음, 함수 기능과 인수명을 확인했으니 각 인수들에 대해 자세히 알아보겠습니다. 세 번째 인수부터 설명하는 편이 다른 인수를 이해하기 좋겠네요. 세 번째 인수 criteria는 ~IF, ~IFS 함수의 인수에서 본 "조건"입니다. 하지만 D~ 함수에서 다른 점은 단순 값이 아니라 고급 필터의 조건 범위처럼 만든 범위라는 것입니다. 위에서 만든 조건 범위이죠. 이 조건 범위를 어떻게 만드냐에 따라 조건이 달라지니 조건을 만드는 방법은 꼭 고급 필터 편을 확인하시고요. 다음, 첫 번째 인수 database입니다. database는 VLOOKUP 함수의 table_array 인수와 유사합니다. table_array는 원본 표에서 기준값을 갖는 항목부터 찾을 값 항목의 모든 범위였죠. database도 유사합니다. 모든 조건 항목과 계산될 항목의 전체 범위입니다. 위에서는 지역과 제품분류가 조건 범위이고 실제 계산 항목은 금액(원)입니다. 즉 "지역" 항목부터 "금액(원)" 항목까지의 전체 범위를 선택하면 됩니다. 제품분류는 그 범위에 포함되기 때문입니다. 그런데 여기서 주의하실 사항이 있습니다. table_array와 database가 결정적으로 다른 점인데, table_array는 레이블을 포함할 필요가 없지만 database는 반드시 레이블을 포함해야 한다는 점입니다. 이유는 critera(조건 범위) 인수로 만든 표의 레이블을 database의 레이블에서 찾기 때문입니다. database에 레이블이 없다면 당연히 찾을 수 없겠죠. 그리고 이 얘기는 criteria 레이블의 명칭이 database 레이블의 명칭과 동일해야 한다는 얘기이기도 합니다. 다음, 두 번째 인수 field입니다. 사실 field에 관해 설명하자면 좀 길어질 것 같은데 여기에서 field는 단순하니 간단하게 설명하겠습니다. 괜히 복잡해질 필요는 없으니까요. 이것도 VLOOKUP 함수를 생각하시면 쉽습니다. VLOOKUP 함수에서 인수 table_array를 만들고 나면 그 범위는 열로 구분되죠. 그리고 찾을 값을 table_array 열의 순서인 col_index_num 인수로 찾았습니다. 여기서 field도 database의 열입니다. 첫 번째 열을 1, 두 번째 열을 2, ...로 사용할 수 있습니다. 여기까지는 col_index_num과 같습니다. 하지만 다른 점이 있는데 바로 그 찾을 열의 항목명을 사용할 수도 있다는 것입니다. 위의 예에서는 찾을 값 "금액(합)"입니다. 즉 열의 순서로도, 열의 항목명으로도 사용할 수 있다는 얘기입니다. 인수들의 설명까지 끝났습니다. 개념적으로는 굉장히 난도가 높은 함수지만 사용법은 간단합니다. 이제 "지역이 경기이거나 제품분류가 전자제품인 것의 금액 합"을 실제로 반환해 보겠습니다. 함수를 작성할 셀(F4)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =DSUM(첫 번째 인수 힌트(database)를 확인하고 조건 항목들과 실제 계산 항목이 포함되게 범위를 참조합니다. => =DSUM(D6:F69(범위가 길기 때문에 키보드 단축키를 활용하는 것이 좋습니다. D6셀 클릭 > ctrl+shift+→(우측 방향키) > ctrl+shift+↓(아래 방향키) > ctrl+backspace)쉼표로 구분, 두 번째 인수 힌트(field)를 확인하고 database 범위 중 실제 결과를 계산할 열의 순서를 입력합니다. => =DSUM(D6:F69,3(열의 순서 대신 항목명 "금액(원)"을 입력하셔도 되고, 간단하게 F6셀을 참조해도 됩니다.)쉼표로 구분, 세 번째 인수 힌트(criteria)를 확인하고 이미 만들어 놓은 조건 범위를 참조 합니다. => =DSUM(D6:F69,3,H6:I8함수가 하나이므로 최종 엔터(닫힌 괄호 자동 생성 후 셀 완성) => =DSUM(D6:F69,3,H6:I8)결과, 값이 정상 반환됩니다. __adsens-adv1__ 아마 눈치채신 분들도 있을 것 같은데 SUBTOTAL 함수를 사용하고 고급 필터를 사용해도 동일한 결과를 얻을 수 있습니다. 개념적으로는 SUBTOTAL 함수가 오히려 쉬울 수 있습니다. 다만 반드시 고급 필터를 사용해야 한다는 단점이 있죠. 하지만 필터링된 데이터만을 볼 수 있다는 장점이기도 합니다. 몇 가지 조금 더 설명하겠습니다. 위 ❸ 단계에서 인수 field는 순서, 항목명을 모두 사용할 수 있다고 했습니다. 그러니까, 숫자 3, "금액(원)", 참조 F6이 모두 사용할 수 있다는 얘기죠. =DSUM(D6:F69,3,H6:I8) =DSUM(D6:F69,"금액(원)",H6:I8) =DSUM(D6:F69,F6,H6:I8) 즉, 위 세 가지 중 편한 것을 사용하면 됩니다. 물론 수식에서 문자를 사용할 경우 큰따옴표로 감싸야 한다는 것을 잊지 마시길 바랍니다. 다음, database는 조건 항목과 실제 계산할 항목이 포함되기만 하면 됩니다. 위의 경우라면 사실 주문번호부터 금액(원)까지 원본 표의 전체 범위로 선택하셔도 됩니다. 조건 항목인 지역, 제품분류 그리고 실제 계산할 항목인 금액(원)도 결국 포함되기 때문이죠. 하지만 굳이 불필요한 항목까지 database로 잡을 필요가 없으니 선택하지 않은 것뿐입니다. 이 경우라면 field의 번호는 달라지겠죠. 그리고 한 가지 더, 만약 원본의 표가 좌측 그림처럼 레이블이 2행으로 만들어진 표라면 database를 어떻게 선택해야 할까요? 이 경우 원본 표의 첫 행부터 database를 잡으면 안됩니다. 말씀드렸듯이 원본 표의 첫 행은 criteria의 레이블이 포함된 형태여야 합니다. 위의 경우 첫 행에는 criteria 범위의 레이블이 없습니다. 가장 좋은 선택은 우측 그림처럼 선택하는 것이고 역시 불필요하지만 주문범위부터 선택하셔도 됩니다. 첫 행은 빼야 한다는 것입니다. D~ 함수.xlsx(14.0 Kb)save_alt __adsens-adv1__2025.09.18 / 13:14~IFS 함수 (SUMIFS, AVERAGEIFS, COUNTIFS, MAXIFS, MINIFS) - 다중 조건 기능 추가하기이번엔 ~IFS로 끝나는 함수를 알아보겠습니다. ~IF처럼 기본 함수가 확장한 형태입니다. S가 하나 더 붙었네요. 영어는 복수가 되면 S가 붙죠. ~IF가 여러 개 붙는다는 의미입니다. 즉 하나만이 아니라 여러 개의 조건 기능을 원래 함수 기능에 추가하는 것입니다. 함수기능 함수 기능SUM 범위의 합계 반환SUMIFS 특정 조건들에 모두 만족하는 범위의 합계 반환AVERAGE 범위의 평균 반환AVERAGEIFS 특정 조건들에 모두 만족하는 범위의 평균 반환 COUNT 범위의 개수 반환COUNTIFS 특정 조건들에 모두 만족하는 범위의 개수 반환MAX 범위 중 최대값 반환MAXIFS 특정 조건들에 모두 만족하는 범위 중 최대값 반환MIN 범위 중 최소값 반환MINIFS 특정 조건들에 모두 만족하는 범위 중 최소값 반환 각 함수의 기능은 위와 같이 정리할 수 있습니다. 역시 별거 없습니다. ~IF 함수와 거의 유사하지만 단지 조건을 여러 개 사용할 수 있으며 그 조건들에 모두 만족하는 데이터만 원래 함수의 기능을 사용하는 것입니다. 그리고 꼭 여러 개를 사용해야 하는 것은 아닙니다. 1개만 사용해도 됩니다. 이 경우라면 ~IF 함수와 동일한 결과를 반환하겠죠. 추가로 말씀드리면 MAX와 MIN의 경우 MAXIF, MINIF 함수는 없습니다. 없어도 상관없습니다. MAXIFS, MINIFS가 있으니, 조건 기능을 사용해야 한다면 MAXIFS, MINIFS를 사용하면 됩니다. __adsens-adv1__ 예제 파일을 열고 추가 작업을 진행하겠습니다. 예제 파일은 ~IF 함수 편에서 작성한 파일입니다. 다중 조건의 항목 셀(L4)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 J4셀을 클릭하여 참조 합니다.다음, 참조와 문자(" & ")를 연결하기 위해 &를 입력하고 문자(" & ")를 작성한 후 다시 다른 참조와 연결하기 위해 &를 한번 더 입력합니다.최종, K4셀을 클릭하여 참조하고 엔터로 L4를 완성합니다. 결과 "경기 & 전자제품"이 반환됩니다. 서식 보기 좋지 않네요. 서식 복사도 진행하겠습니다. 복사할 서식을 갖는 범위(K4:K7)를 클릭 드래그로 선택합니다.홈 > 서식 복사를 클릭합니다.붙여 넣기를 할 범위의 첫 셀(L4)을 클릭합니다. 결과, 그림처럼 2가지 조건 항목이 만들어집니다. 뭘 하고 싶은지 눈치채셨죠? 경기 지역에 판매된 전자제품의 금액 합, 금액 평균, 개수를 알고 싶은 겁니다. 조건을 1개가 아니라 2개로 만든 것이죠. 물론 3개, 4개 만들어도 되지만, 간단하게 2개만 해 보셔도 3개, 4개, ... 도 만든는 데 문제가 없을 것으로 생각합니다. __adsens-adv1__ 혹시 지금 한 작업 중 & 기호로 참조와 문자를 연결한 것을 잘 모르겠다면 아래 강좌를 확인해 주세요. 수식에서 문자, 숫자, 참조의 연결 &엑셀 수식에서 값을 연결하는 방법을 설명합니다. 수식에서 숫자와 문자를 혼합하여 사용하면 어떤 결과가 나오는지 확인합니다. 숫자와 문자를 구분하고 & 기호 연결하면 수식에서도 문자를 사용할 수 있다는 것을 확인합니다. 숫자, 문자, 참조를 & 기호로 연결해 보고 문자의 경우 반드시 큰따옴표를 사용해야 한다는 것을 알아봅니다.https://flylight.kr/ 첫 번째와 마지막 &는 연결을 위한 &이고 중간 " & "는 문자로, 두 참조가 붙어 있으면 구분이 좋지 않아 문자로 구분해 놓은 것입니다. 위 그림에서 초록 박스의 수식을 보면 바로 이해하실 수 있을 것으로 생각합니다. =J4&K4 나 =J4&"&"&K4 로 사용하면 경기와 전자 제품이 보기 좋게 구분되지 않기 때문에 =J4&" & "&K4 로 사용하여 보기 좋게 만든 것입니다. __adsens-adv1__ 이제 함수 정리를 하겠습니다. SUMIFS여러 조건을 충족하는 모든 데이터의 합을 계산SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)sum_range합계를 구할 셀 범위.criteria_range1첫 번째 조건 범위criteria1criteria_range1에서 찾고자 하는 첫 번째 조건criteria_range2[선택] 두 번째 조건 범위criteria2[선택] criteria_range2에서 찾고자 하는 두 번째 조건 AVERAGEIFS여러 조건을 충족하는 모든 데이터의 평균을 계산AVERAGEIFS(average_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)average_range평균를 구할 셀 범위.criteria_range1첫 번째 조건 범위criteria1criteria_range1에서 찾고자 하는 첫 번째 조건criteria_range2[선택] 두 번째 조건 범위criteria2[선택] criteria_range2에서 찾고자 하는 두 번째 조건MAXIFS여러 조건을 충족하는 모든 데이터 중 최대값 반환MAXIFS(max_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)max_range최대값를 구할 셀 범위.criteria_range1첫 번째 조건 범위criteria1criteria_range1에서 찾고자 하는 첫 번째 조건criteria_range2[선택] 두 번째 조건 범위criteria2[선택] criteria_range2에서 찾고자 하는 두 번째 조건MINIFS여러 조건을 충족하는 모든 데이터 중 최소값 반환MINIFS(min_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)min_range최소값를 구할 셀 범위.criteria_range1첫 번째 조건 범위criteria1criteria_range1에서 찾고자 하는 첫 번째 조건criteria_range2[선택] 두 번째 조건 범위criteria2[선택] criteria_range2에서 찾고자 하는 두 번째 조건COUNTIFS여러 조건을 충족하는 데이터의 개수를 반환COUNTIFS(criteria_range1, criteria1, [criteria_range2, criteria2], ...)criteria_range1첫 번째 조건 범위criteria1criteria_range1에서 찾고자 하는 첫 번째 조건criteria_range2[선택] 두 번째 조건 범위criteria2[선택] criteria_range2에서 찾고자 하는 두 번째 조건좀 많네요. 하지만 기능들은 기본 함수들의 확장이니, 모두 아실 것으로 생각합니다. 그리고 COUNTIFS를 제외한 나머지 함수의 첫 번째 인수(sum_range, average_range, max_range, min_range)는 계산하거나 찾을 실제 범위라는 것만 이해하시면 나머지는 쉽습니다. COUNTIFS는 COUNTIF와 동일하게 실제로 찾거나 계산할 범위가 필요 없습니다. 그냥 개수를 세기만 하면 되죠. 나머지 인수들은 모두 동일합니다. criteria_range1, criteria1, criteria_range2, criteria2가 반복되는 형태입니다. __adsens-adv1__ 그럼, 이 인수들이 왜 필요한지 논리적으로 생각해 보겠습니다. 이미 알고 있는 SUMIF 함수의 인수들을 생각하면 쉽게 이해할 수 있습니다. 일단, 실제 계산할 범위는 금액(원) 항목의 모든 셀입니다. 이건 기본 함수 SUM의 범위와 동일합니다. 다음, 조건 기능이 추가되면서 함수는 SUM → SUMIF가 됩니다. 그리고 2가지 인수가 더 필요해졌습니다. 지역이 경기라는 조건으로 "지역"이라는 criteria_range(조건 범위)와 "경기"라는 criteria(조건)가 필요해진 것입니다. 그럼, 여기에 더해서 제품분류가 전자제품이라는 조건이 하나 더 생긴다면, 역시 "제품분류"라는 criteria_range(조건 범위)와 "전자제품"이라는 criteria(조건)이 더 필요해집니다. 즉 조건이 하나씩 추가되면, criteria_range(조건 범위)와 criteria(조건)가 쌍으로 필요하다는 얘기가 됩니다. 그래서 정리한 함수의 구분을 보면 criteria_range2와 criteria2가 대괄호로 묶인 것입니다. 핵심은 조건을 추가 사용할 것이라면 인수가 2개씩 늘어난다는 얘기입니다. 만약 여기에 고객명이 김씨인 조건이 추가된다면, 역시 "고객명"이라는 criteria_range와 "김*"이라는 criteria가 또 쌍으로 필요하게 되겠죠. 이렇게 조건은 127개까지 계속 추가할 수 있습니다. 물론 쌍으로 추가입니다. 그리고 필요 없다면 조건 1개만 사용하면 됩니다. criteria_range1과 criteria1만 있으면 된다는 얘기고 나머지는 선택 사항이란 것입니다. 인수들의 설명을 끝났지만, 순서도 조금 설명해야겠습니다. ~IF와 ~IFS가 기능과 인수가 비슷하지만 위치는 좀 다릅니다. ~IF 함수의 경우 실제 계산 범위가 제일 뒤에 나옵니다. 조건을 처리한 후 실제 계산을 하는 형태죠. 하지만 ~IFS 함수의 경우는 실제 계산 범위가 제일 앞에 나옵니다. 인수들의 명칭을 잘 기억하시면 사실 인수 힌트만 잘 보시면 됩니다. 하지만 기억하시라고 조금 더 설명하겠습니다. 함수가 자신의 기능을 처리하기 위해서 인수는 위치로 판단합니다. 위를 예로 보면 SUMIF의 3번째 인수가 실제 합칠 범위죠. 여기서는 위치가 바뀔 일이 없습니다. 3번째는 무조건 합칠 범위입니다. SUMIFS의 sum_range 인수도 함수의 마지막 위치에 있다고 가정해 보겠습니다. 그럼 몇 번째 인수가 sum_range 일까요? 조건이 하나라면 3번째, 조건이 두 개라면 5번째, 세 개라면 7번째가 될 것입니다. 조건의 개수가 바뀜에따라 sum_range의 위치가 변할 것입니다. 즉 몇 번째 인수가 sum_range인지 특정할 수 없습니다. sum_range을 알 수 없다는 얘기가 됩니다. 이런 이유 때문에 실제 계산 범위는 제일 앞에 있어야 합니다. 제일 앞에 있으면 1번째가 무조건 합칠 범위라는 정할 수 있으니까요. 그리고 같은 이유로 생략돼도 되는 인수들은 마지막 순서에 위치하는 것이죠. 추가로, 실제 계산 범위(sum_range, average_range, max_range, min_range)는 ~IFS 함수에서는 필수 인수입니다. ~IF 함수에서는 range 인수와 같다면 작성하지 않아도 되는 선택 사항이었지만, ~IFS 함수에서는 criteria_range1과 같다 해도 반드시 작성해야 한다는 것도 기억해 주세요. __adsens-adv1__ 함수들의 설명이 끝났으니 "지역이 경기이고 제품분류가 전자제품인 것의 금액 합"을 반환해 보겠습니다. SUMIF 함수를 작성할 셀(L5)을 클릭하여 선택합니다.수식 입력줄에서 수식을 시작하고 함수명을 작성합니다. => =SUMIFS(첫 번째 인수 힌트(sum_range)를 확인하고 금액(원) 항목의 모든 데이터 범위를 참조합니다. => =SUMIFS(F5:F67(범위가 길기 때문에 키보드 단축키를 활용하는 것이 좋습니다. F5셀 클릭 > ctrl+shift+↓(아래 방향키) > ctrl+backspace)쉼표로 구분, 두 번째 인수 힌트(criteria_range1)를 확인하고 지역 항목의 모든 데이터 범위를 참조 => =SUMIFS(F5:F67,D5:D67(역시 범위가 길기 때문에 키보드 단축키를 활용. D5셀 클릭 > ctrl+shift+↓(아래 방향키) > ctrl+backspace)쉼표로 구분, 세 번째 인수 힌트(criteria1)를 확인하고 범위 중 찾고자 하는 값을 가진 셀(J4)을 참조합니다. => =SUMIFS(F5:F67,D5:D67,J4쉼표로 구분, 네 번째 인수 힌트(criteria_range2)를 확인하고 제품분류 항목의 모든 데이터 범위를 참조 => =SUMIFS(F5:F67,D5:D67,J4,E5:E67(역시 범위가 길기 때문에 키보드 단축키를 활용. E5셀 클릭 > ctrl+shift+↓(아래 방향키) > ctrl+backspace)쉼표로 구분, 다섯 번째 인수 힌트(criteria2)를 확인하고 범위 중 찾고자 하는 값을 가진 셀(K4)을 참조합니다. => =SUMIFS(F5:F67,D5:D67,J4,E5:E67,K4복잡해 보이지만 함수는 하나입니다. 최종 엔터(닫힌 괄호 자동 생성 후 셀 완성) => =SUMIFS(F5:F67,D5:D67,J4,E5:E67,K4) 결과, 지역이 경기이고 제품분류가 전자제품인 것의 금액 합이 반환되었습니다. 나머지 평균과 개수는 직접 해 보시길 바랍니다. 평균은 함수명만 다를 뿐 나머지는 동일하게 하시면 되고, 개수는 실제 계산 범위가 불필요하니 첫 번째 인수가 없다는 것만 유의하시면 됩니다. MAXIFS와 MINIFS는 작성란이 없는데 최대값과 최소값을 반환한다는 함수 기능만이 다르고 작성법은 모두 같으니 아무 셀에서 해 보시기 바랍니다. 결과만 확인하겠습니다. 그리고 J4셀과 K4셀은 이미 데이터 유효성 검사로 목록화했다는 것도 기억하시죠? 간단하게 선택하여 지역과 제품분류를 변경할 수 있습니다. 아무거나 변경해 보세요. J4셀과 K4셀의 값이 바뀌면 L4셀의 조건도 바뀌고 결과도 자동 반영되는 것을 확인할 수 있습니다. 좋죠. ~IFS 함수.xlsx(14.9 Kb)save_alt __adsens-adv1__2025.09.17 / 14:11