기본 콘텐츠로 건너뛰기

글

9월, 2026의 게시물 표시

[엑셀]엑셀 날짜는 사실 숫자다 — 1900년부터 세어온 일련번호의 정체

 날짜가 적힌 셀에 그냥 1을 더하면 무슨 일이 벌어질까? 신기하게도 결과는 정확히 '다음 날 날짜'가 된다. 문자처럼 보이는 날짜에 어떻게 숫자를 더했는데 날짜가 하루 늘어날 수 있을까. 답은 간단하다. 엑셀에서 날짜는 애초에 문자가 아니라 숫자이기 때문이다. 날짜가 숫자로 저장된다는 사실 확인하기 날짜가 입력된 셀의 서식을 '일반'으로 바꿔보면 그 정체가 바로 드러난다. 2026-01-15라고 표시되던 셀이 갑자기 46037 같은 숫자로 바뀐다. 이 숫자가 바로 엑셀이 내부적으로 이 날짜를 저장하고 있는 실제 값, 즉 시리얼 넘버(일련번호)다. 화면에 "2026-01-15"라고 보이는 것은 앞서 TEXT 함수 편에서 다룬 것처럼, 이 숫자 위에 날짜 서식이라는 표시 규칙이 덧씌워진 결과일 뿐이다. 1900년을 기준으로 세는 시리얼 넘버 시스템 엑셀은(윈도우 버전 기준) 1900년 1월 1일을 시리얼 넘버 1로 정하고, 그날부터 하루가 지날 때마다 숫자를 1씩 늘려가는 방식으로 날짜를 표현한다. 46037이라는 숫자는 곧 "1900년 1월 1일로부터 46,037번째 되는 날"이라는 뜻이다. 날짜에 숫자를 더하거나 빼는 계산이 자연스럽게 되는 이유가 바로 여기에 있다. 날짜끼리의 덧셈·뺄셈은 사실 이 일련번호끼리의 평범한 산술 연산일 뿐이다. =DATE(2026,1,15) + 30 이 수식은 2026년 1월 15일의 시리얼 넘버에 30을 더한 것과 같으므로, 결과는 정확히 30일 뒤의 날짜인 2026년 2월 14일이 된다. 시간은 어떻게 표현될까 — 소수점 이하가 하루의 몇 분의 몇인지 날짜가 정수로 표현된다면, 시간은 그 정수의 소수점 이하 부분으로 표현된다. 하루 24시간을 1로 놓았을 때, 낮 12시는 하루의 정확히 절반이므로 0.5가 된다. 예를 들어 46037.5라는 값은 "2026년 1월 15일 낮 12시"를 의미한다. 날짜와 시간이 함께 입력된 셀을 다룰 때 정수 부...

[엑셀]TEXTSPLIT과 TEXTJOIN 원리 — 문자열을 쪼개고 다시 합치는 두 방향

 "서울특별시 강남구 테헤란로 123"이라는 주소 한 줄을 시/구/도로명으로 각각 나눠야 하는 업무를 받았다고 해보자. 예전이라면 LEFT·MID·FIND를 여러 겹 조합해야 했을 이 작업이, 지금은 TEXTSPLIT 한 줄로 끝난다. 그리고 이렇게 쪼갠 조각들을 다시 원하는 형태로 이어 붙이는 반대 방향의 작업에는 TEXTJOIN이 쓰인다. 이 두 함수는 결국 '구분자'라는 하나의 개념을 축으로 서로 반대 방향을 바라보고 있다. 구분자 기반 파싱이라는 개념 "파싱(parsing)"이란 하나의 문자열을 정해진 규칙에 따라 의미 있는 조각들로 나누는 작업을 말한다. 이때 가장 널리 쓰이는 규칙이 '구분자'다. 콤마(,)로 구분된 CSV 파일, 공백으로 구분된 주소, 슬래시(/)로 구분된 날짜 모두 구분자를 기준으로 조각을 나눈다는 동일한 원리를 공유한다. TEXTSPLIT은 바로 이 '구분자를 기준으로 나눈다'는 규칙을 함수 하나로 구현한 것이다. TEXTSPLIT의 원리 =TEXTSPLIT("서울특별시 강남구 테헤란로 123", " ") 이 수식은 공백(" ")을 구분자로 삼아 원본 텍스트를 조각내고, 그 결과를 앞서 다룬 동적 배열(스필) 방식으로 여러 셀에 자동으로 펼쳐 보여준다. 결과는 "서울특별시", "강남구", "테헤란로", "123" 네 개의 조각으로 나뉜다. 구분자를 콤마나 슬래시처럼 다른 기호로 바꾸면 CSV 데이터나 날짜 문자열을 나누는 데도 똑같은 원리로 응용할 수 있다. TEXTJOIN — 반대 방향의 작업 =TEXTJOIN(", ", TRUE, B2:B5) TEXTJOIN은 여러 셀에 흩어진 값들을, 지정한 구분자를 사이사이에 끼워가며 하나의 텍스트로 합친다. 두 번째 인수(TRUE)는 빈 셀을 무시할지 여부를 정하는데,...

[엑셀]LEFT·RIGHT·MID의 공통점 — 텍스트는 결국 문자들의 배열이다

 "010-1234-5678"이라는 전화번호에서 가운데 네 자리만 뽑아내고 싶을 때, 많은 사람이 LEFT나 RIGHT는 익숙하게 쓰면서도 MID는 어렵게 느낀다. 그런데 이 세 함수는 사실 하나의 동일한 원리 위에서 동작한다. 텍스트를 하나의 덩어리가 아니라, 문자 하나하나가 순서대로 나열된 '배열'로 바라보는 관점이다. 텍스트를 문자 단위 배열로 보는 관점 "엑셀"이라는 두 글자 텍스트는, 배열의 눈으로 보면 1번째 자리에 "엑", 2번째 자리에 "셀"이 들어 있는 구조와 다르지 않다. 앞서 여러 글에서 다룬 배열이 셀들의 모음이었다면, 문자열 함수에서의 배열은 '문자들의 모음'이라는 점만 다를 뿐 "위치를 기준으로 원하는 부분만 골라낸다"는 발상 자체는 동일하다. LEFT·RIGHT·MID가 공유하는 하나의 원리 =LEFT("010-1234-5678", 3) → "010" =RIGHT("010-1234-5678", 4) → "5678" =MID("010-1234-5678", 5, 4) → "1234" 세 함수 모두 "어디서부터, 몇 글자를" 가져올지를 지정한다는 점에서 본질적으로 같은 함수다. LEFT는 항상 1번째 자리부터 시작한다고 고정해둔 것이고, RIGHT는 항상 끝에서부터 거꾸로 센 것이며, MID는 시작 위치를 자유롭게 지정할 수 있도록 일반화한 버전이다. 즉 LEFT와 RIGHT는 MID의 특수한 경우라고 볼 수 있다. MID로 문자 단위 추출을 직접 확인해보기 이 원리를 직접 확인해보는 가장 좋은 방법은 MID로 한 글자씩 뽑아보는 것이다. =MID("엑셀",1,1) → "엑" (1번째 자리 문자 1개) =MID("엑셀",2,1) → ...

[엑셀]TEXT 함수의 원리 — 셀에 보이는 값과 실제 값은 다르다

 셀에 1234.5를 입력했는데 화면에는 ₩1,235로 표시되는 걸 본 적이 있을 것이다. 이때 이 셀을 다른 수식에서 참조하면 어떤 값이 쓰일까. ₩1,235일까, 아니면 원래의 1234.5일까? 정답은 1234.5다. 이 질문에 답할 수 있다면 TEXT 함수와 서식 코드의 원리를 이미 절반은 이해한 것이다. 값과 표시 방식은 서로 다른 층위에 있다 엑셀은 셀 안에 두 가지 정보를 따로 들고 있다. 하나는 '실제 값'(1234.5라는 숫자)이고, 다른 하나는 '표시 형식'(어떻게 보여줄지에 대한 규칙)이다. 셀 서식에서 통화, 백분율, 날짜 같은 형식을 지정해도 실제 값 자체는 전혀 바뀌지 않는다. 단지 화면에 그려지는 방식만 달라질 뿐이다. 이 원리를 이해하면 "분명 100%라고 표시되는데 계산에서는 1로 쓰인다"거나 "날짜가 화면엔 2026-01-15인데 실제로는 46037이라는 숫자다" 같은 현상이 전혀 이상하지 않게 된다. 셀 서식과 TEXT 함수의 차이 셀 서식(Ctrl+1)을 이용한 표시 형식 변경은 '값은 그대로 둔 채 화면 표시만 바꾸는' 방식이다. 반면 TEXT 함수는 이 서식 규칙을 적용한 결과를 아예 새로운 텍스트 문자열로 만들어낸다 는 점이 다르다. =TEXT(1234.5, "#,##0") 이 수식의 결과는 "1,235"라는 텍스트다. 셀 서식과 달리 이 결과는 더 이상 숫자 1234.5가 아니라 문자로 취급되므로, 이 값을 다시 계산에 사용하면 오류가 나거나 원치 않는 결과를 얻을 수 있다. 대신 다른 텍스트와 자연스럽게 이어 붙일 수 있다는 장점이 있다. ="총 매출: "&TEXT(1234.5,"#,##0")&"원" 이런 식으로 문장 안에 숫자를 원하는 형태로 끼워 넣고 싶을 때 TEXT 함수가 진가를 발휘한다. 셀 서식만으로는 이렇게 텍스트와 섞어서 표...

[엑셀]SORT와 SORTBY의 차이 — 정렬 대상과 정렬 기준은 다른 것이다

 직원 명단을 입사일 순으로 정렬해야 하는데, 화면에는 이름만 보여주고 싶다고 해보자. "이름을 정렬"하는 게 아니라 "입사일을 기준으로, 이름을 줄 세우는" 것이다. 이 미묘한 차이를 구분하지 못하면 SORT와 SORTBY 중 무엇을 써야 할지 자꾸 헷갈리게 된다. 이번 글에서는 이 둘의 차이를 '정렬 대상'과 '정렬 기준'을 분리해서 생각하는 관점으로 풀어본다. SORT — 정렬 대상 자체가 기준이 되는 가장 단순한 경우 =SORT(A2:A100) SORT의 가장 기본적인 형태는 정렬하고 싶은 범위 자체를 그대로 정렬 기준으로 삼는다. A열의 값을 A열의 값 순서대로 줄 세우는 것이니, 대상과 기준이 같은 열이다. 여러 열로 이루어진 표를 정렬할 때도, 몇 번째 열을 기준으로 삼을지 지정할 수 있다. =SORT(A2:D100, 3, -1) 이 수식은 A2:D100 전체 표를, 세 번째 열(C열) 기준으로 내림차순(-1) 정렬한다. 여기까지는 '기준이 되는 열도 결국 정렬 대상 표 안에 포함되어 있다'는 점에서 SORT 하나로 충분하다. SORTBY — 대상과 기준을 완전히 분리하기 그런데 앞서 예로 든 것처럼 "이름만 보여주되, 입사일 기준으로 줄 세우고 싶다"면 이야기가 달라진다. 보여줄 열(이름)과 기준으로 삼을 열(입사일)이 서로 다른 범위이기 때문이다. 이럴 때 쓰는 함수가 SORTBY다. =SORTBY(A2:A100, C2:C100) 이 수식은 "A2:A100(이름)을 보여주되, 정렬 순서는 C2:C100(입사일)을 기준으로 정한다"는 뜻이다. SORT가 "정렬할 표 안에서 몇 번째 열을 기준으로 삼을지"를 지정하는 구조였다면, SORTBY는 아예 "보여줄 것"과 "기준으로 삼을 것"을 처음부터 별개의 인수로 나눠 받는다는 점이 핵심적인 차이다. SORT vs SORTBY 비교 구분...

[엑셀]UNIQUE 함수의 원리 — 중복 제거는 결국 집합(set) 만들기다

 고객 명단 5,000줄에서 실제 고객이 몇 명인지 세야 한다면, 가장 먼저 무엇을 해야 할까? 그냥 행 개수를 세면 안 된다. 같은 고객이 여러 번 주문했다면 이름이 여러 번 반복해서 나타날 것이기 때문이다. 이럴 때 필요한 것이 '중복 제거'이고, 엑셀에서는 UNIQUE 함수가 이 역할을 맡는다. 그런데 "중복을 제거한다"는 이 작업은, 사실 수학에서 아주 오래전부터 다뤄온 집합(set)이라는 개념과 정확히 같은 일이다. 집합이라는 개념부터 다시 떠올려보기 수학에서 집합은 "같은 원소가 두 번 들어갈 수 없는 모음"으로 정의된다. {사과, 사과, 바나나}라는 목록이 있어도, 이것을 집합으로 표현하면 {사과, 바나나}가 된다. 중복된 사과는 한 번만 존재하는 것으로 취급되기 때문이다. 엑셀의 고객 명단도 똑같다. "홍길동"이라는 이름이 열 번 등장하든 한 번 등장하든, 집합의 관점에서는 "홍길동"이라는 원소 하나로 취급되어야 실제 고객 수를 정확히 셀 수 있다. UNIQUE의 동작 원리 =UNIQUE(A2:A5000) 이 수식은 A2:A5000 범위를 위에서부터 훑으면서, 처음 등장하는 값은 결과에 포함시키고 이미 한 번 나온 값과 같은 값이 다시 나타나면 결과에서 제외하는 방식으로 동작한다. 결과는 스필로 펼쳐지므로, 원본 범위에 몇 개의 고유값이 있는지 미리 알 필요 없이 있는 그대로 결과가 아래로 채워진다. 실제 고객 수가 필요하다면 이 결과를 COUNTA로 한 번 더 감싸면 된다. =COUNTA(UNIQUE(A2:A5000)) UNIQUE와 COUNTIF, 같은 문제를 푸는 두 가지 접근 UNIQUE가 등장하기 전에는 중복 여부를 확인할 때 주로 COUNTIF를 사용했다. =COUNTIF(A:A,A2)>1 — A2와 같은 값이 A열에 2개 이상 있는지 '판정'만 해준다. 목록 자체를 만들어주지는 않는다. =UNIQUE(A2:A5000) — 중복...

[엑셀]FILTER 함수 원리 — 엑셀 안에 숨어 있는 WHERE절

 매장별 판매 데이터 수천 행 중에서 "서울 지역이면서 매출이 100만원 이상인 행"만 뽑아 별도 표로 만들어야 하는 상황이라고 해보자. 예전 같으면 자동 필터를 걸고 눈으로 복사하거나, 고급 필터 대화상자와 씨름해야 했다. 지금은 FILTER 함수 하나면 끝난다. 그런데 이 함수의 동작 방식을 데이터베이스를 다뤄본 사람이라면 꽤 익숙하게 느낄 것이다. 바로 SQL의 WHERE절과 개념적으로 닮아 있기 때문이다. FILTER의 기본 구조 =FILTER(A2:D1000, B2:B1000="서울") FILTER는 두 개의 핵심 인수를 받는다. "걸러낸 결과로 보여줄 범위"와 "그 판단 기준이 되는 조건"이다. 이 수식은 B열이 "서울"인 행들만 골라, A부터 D열까지의 전체 행 데이터를 그대로 스필(앞선 글에서 다룬 동적 배열)로 펼쳐 보여준다. SUMIF가 조건에 맞는 값을 '더하는' 함수였다면, FILTER는 조건에 맞는 '행 자체를 그대로 가져오는' 함수라는 점이 가장 큰 차이다. WHERE절과의 개념적 유사성 SQL에 익숙하다면 아래 두 표현이 사실상 같은 일을 한다는 것을 바로 알아챌 수 있다. SQL 엑셀 FILTER SELECT * FROM sales WHERE region = '서울' =FILTER(A2:D1000, B2:B1000="서울") WHERE region = '서울' AND amount >= 1000000 =FILTER(A2:D1000, (B2:B1000="서울")*(C2:C1000>=1000000)) 두 방식 모두 "전체 데이터 중 특정 조건을 만족하는 행만 선택한다"는 동일한 개념 위에 서 있다. 다만 SQL의 WHERE는 조건을 하나의 불리언 식으로 서술하는 반면, 엑셀의 FILTER는 앞서 SUMPRODUCT에서 다룬 것처럼...

[엑셀]동적 배열(스필)이란 무엇인가 — 결과가 셀 밖으로 흘러넘치는 이유

앞선 글에서 배열수식은 "여러 개의 계산 결과를 하나의 셀에 압축해서 담아내는 방식"이었다고 설명했다. 그런데 만약 그 결과를 굳이 압축하지 않고, 계산된 값의 개수만큼 그대로 여러 셀에 펼쳐 보여준다면 어떨까? 이 발상에서 출발한 것이 바로 동적 배열, 흔히 '스필(Spill)'이라고 부르는 기능이다. 예전 엑셀이 결과를 펼쳐 보여주지 못했던 이유 2018년 이전의 엑셀에서는 한 셀에 입력한 수식은 오직 그 셀 하나에만 값을 반환한다는 규칙이 있었다. A1에 수식을 입력했는데 계산 결과가 5개라면, 나머지 4개는 갈 곳이 없어 SUM 같은 함수로 강제로 하나의 값으로 합쳐야 했다. 여러 개의 결과를 여러 셀에 나눠 보여주려면 A1부터 A5까지를 미리 선택한 뒤 배열수식을 입력하는 번거로운 과정을 거쳐야 했고, 이마저도 중간에 데이터가 몇 개로 늘어날지 미리 알아야 한다는 한계가 있었다. 스필의 원리 — 결과 개수만큼 자동으로 펼치기 동적 배열 방식에서는 이 제약이 사라진다. A1에 결과가 5개인 수식을 입력하면, 엑셀은 A1은 물론 A2, A3, A4, A5까지 필요한 만큼 자동으로 값을 채워 넣는다. 이렇게 계산 결과가 입력한 셀을 넘어 주변 셀로 자연스럽게 퍼져나가는 현상을 물이 흘러넘치는 모습에 빗대어 '스필'이라고 부른다. =SEQUENCE(5) 이 수식을 A1에 입력하면 1부터 5까지의 숫자가 A1:A5에 자동으로 펼쳐진다. 이때 실제로 수식이 입력된 셀은 A1 하나뿐이며, A2부터 A5는 A1의 계산 결과가 흘러넘친 '유령 셀' 같은 존재다. 그래서 A2를 클릭해서 직접 값을 수정하려고 하면 편집이 되지 않고, 대신 A1의 수식을 바꿔야 전체 결과가 함께 바뀐다. 스필 범위를 통째로 참조하는 # 연산자 A1의 결과가 몇 칸으로 퍼질지 모르는 상태에서, 이 전체 결과를 다른 수식에서 참조하고 싶을 때는 # 기호를 사용한다. =SUM(A1#) 여기서 A1# 은 "A1에서 시작해 스...

[엑셀]배열수식이란 무엇인가 — 하나의 셀에 여러 계산이 담기는 원리 스칼라 연산과 배열 연산의 차이

 셀 하나를 클릭했는데 그 안에서 수백 번의 계산이 동시에 일어나고 있다면 믿어지는가. 앞선 글에서 다룬 SUMPRODUCT나 SUMIF의 조건 판정이 바로 그런 경우였다. 겉으로는 셀 하나에 결과값 하나만 보이지만, 그 이면에서는 범위 전체를 대상으로 한 계산이 통째로 진행되고 있었다. 이 글에서는 이 현상의 정체, 즉 배열수식이라는 개념을 원리 차원에서 짚어본다. 스칼라 연산과 배열 연산의 차이 평소 우리가 쓰는 대부분의 수식은 '스칼라 연산'이다. =A2+B2 처럼 셀 하나와 셀 하나를 계산해서 값 하나를 내놓는 방식이다. 입력도 하나, 출력도 하나다. 반면 '배열 연산'은 여러 개의 값을 하나의 묶음(배열)으로 취급해서 한꺼번에 계산한다. =A2:A10+B2:B10 이라고 쓰면, 이는 A2+B2, A3+B3, ... A10+B10이라는 아홉 번의 계산을 동시에 수행하라는 뜻이 된다. 입력은 여러 개(범위 대 범위)지만, 이 계산 결과를 최종적으로 어떻게 압축해서 보여줄지는 그 다음 문제다. 결과가 여러 개인데 셀은 하나뿐이라면? 여기서 배열수식의 진짜 개념이 드러난다. 아홉 번의 계산 결과 아홉 개의 값이 나왔는데, 이를 담을 셀이 하나뿐이라면 엑셀은 어떻게 해야 할까. 과거 방식에서는 이 아홉 개의 값을 SUM이나 COUNT 같은 함수로 다시 하나로 압축해서 보여주는 방식을 썼다. 예를 들어 {=SUM(A2:A10*B2:B10)} 이라는 수식은 A와 B 각 행을 곱한 아홉 개의 결과를 배열로 만든 뒤, 그 아홉 개를 SUM으로 다시 하나로 합쳐 셀 하나에 담아내는 구조다. 여기서 중괄호 {} 는 사용자가 직접 입력하는 기호가 아니라, 예전 엑셀에서 Ctrl+Shift+Enter를 눌러 "이건 배열수식입니다"라고 선언했을 때 엑셀이 자동으로 붙여주던 표시였다. 왜 예전에는 이런 특별한 입력이 필요했나 일반 함수는 셀 하나 대 셀 하나로 계산하도록 설계되어 있었기 때문에, 여러 값을 배열째로 넘기려면 엑셀에게...

[엑셀]SUMPRODUCT의 원리 — 배열 곱셈으로 조건을 표현하는 방법 조건을 0/1 배열로 바꿔 곱하는 논리

 재고 담당자 A씨는 "카테고리가 가전이거나 문구인 상품 중, 재고가 10개 미만인 것들의 총 재고 금액"을 구해야 했다. SUMIFS로 시도해봤지만 '이거나(OR)' 조건이 걸리는 순간 수식이 꼬이기 시작했다. 이럴 때 등장하는 함수가 SUMPRODUCT다. 이름 그대로 '곱한 것들의 합(sum of products)'인데, 이 단순한 이름 안에 조건부 집계 함수들과는 결이 다른 발상이 숨어 있다. SUMPRODUCT는 원래 무엇을 위한 함수였나 SUMPRODUCT의 원래 용도는 사실 단순하다. 두 개 이상의 배열을 같은 위치끼리 곱한 뒤 그 결과를 모두 더하는 것이다. =SUMPRODUCT(A2:A5, B2:B5) A열이 수량, B열이 단가라면 이 수식은 (A2×B2)+(A3×B3)+(A4×B4)+(A5×B5), 즉 각 행의 금액을 계산해 모두 더한 총 판매금액을 한 번에 구해준다. 여기까지는 조건과 아무 상관이 없다. 그런데 이 '배열끼리 곱해서 더한다'는 성질이, 조건을 표현하는 데도 그대로 활용될 수 있다는 점이 SUMPRODUCT를 특별하게 만든다. 핵심 원리 — 조건을 0과 1로 바꿔서 곱하기 엑셀에서 (A2:A100="가전") 처럼 범위와 조건을 비교하면, 그 결과는 TRUE 또는 FALSE로 이루어진 배열이 된다. 그리고 엑셀 내부에서 TRUE는 1로, FALSE는 0으로 계산에 참여한다. 즉 조건 하나를 '만족하면 1, 아니면 0'인 숫자 배열로 바꿀 수 있다는 뜻이다. SUMPRODUCT는 바로 이 성질을 이용해, 조건 배열과 금액 배열을 곱하는 방식으로 조건부 합계를 만들어낸다. 행 카테고리="가전" 재고<10 두 조건 곱(AND) 재고금액 곱해서 더할 값 1 1 (참) 1 (참) 1 50,000 50,000 2 1 (참) 0 (거짓) 0 30,000 0 3 0 (거짓) 1 (참) 0 20,000 0 이 표처럼 각 조건을 0...

[엑셀] AVERAGEIF 계열 — 평균이라는 연산이 조건과 만날 때 평균의 정의(합/개수)와 조건부 집계의 결합

부서별 평균 급여, 학년별 평균 점수처럼 "조건에 맞는 것들만 골라서 평균을 내야" 하는 상황을 만나면 많은 사람이 AVERAGEIF를 검색해서 그대로 수식만 베껴 쓴다. 그런데 정작 "평균이라는 연산 자체가 무엇인지" 다시 떠올려보면, AVERAGEIF가 왜 그런 결과를 내는지 훨씬 명확하게 이해할 수 있다. 질문을 하나 던져보자. 조건에 맞는 항목이 하나도 없을 때 평균은 어떻게 될까? 평균이란 무엇인가 — 합을 개수로 나눈 값 평균은 수학적으로 아주 단순하다. "값들을 모두 더한 합"을 "값의 개수"로 나눈 것이다. 이 정의를 기억해두면 AVERAGEIF의 동작 방식이 훨씬 쉽게 이해된다. AVERAGEIF는 새로운 개념을 도입한 함수가 아니라, 앞서 다룬 SUMIF(조건에 맞는 값의 합)와 COUNTIF(조건에 맞는 값의 개수)를 내부적으로 결합해 그 결과를 나눈 것과 같은 일을 한다고 보면 된다. AVERAGEIF의 동작 원리 =AVERAGEIF(B2:B50, "영업팀", C2:C50) 이 수식은 B2:B50에서 "영업팀"인 위치를 찾아 그 위치에 해당하는 C2:C50의 값들만 골라낸 뒤, 그 값들의 합을 다시 그 개수로 나눈다. 즉 개념적으로는 다음 계산과 동일한 결과를 낸다. SUMIF(B2:B50, "영업팀", C2:C50) — 영업팀 급여의 합 COUNTIF(B2:B50, "영업팀") — 영업팀 인원 수 1번 결과를 2번 결과로 나눈 값 — 이것이 곧 AVERAGEIF의 결과 AVERAGEIF가 SUMIF, COUNTIF와 인수 구조(조건 범위, 조건, 대상 범위)를 거의 그대로 물려받은 이유도 여기에 있다. 셋 모두 '조건 범위를 참/거짓으로 나눠 대상 범위와 짝짓는다'는 동일한 뼈대 위에서, 마지막에 더하기·세기·나누기 중 무엇을 하느냐만 다를 뿐이다. AVERAGEIFS — 여러 조건...

[엑셀]COUNTIF/COUNTIFS — 카운팅과 조건 매칭의 관계 SUMIF와의 구조적 유사성과 차이

 출석부를 관리하다 보면 "결석이 3회 이상인 학생 수"나 "이번 달 지각 횟수"처럼 특정 조건을 만족하는 항목이 '몇 개'인지 세야 하는 순간이 자주 온다. 앞선 글에서 다룬 SUMIF가 조건에 맞는 값들을 '더하는' 함수였다면, 이번에 다룰 COUNTIF는 조건에 맞는 항목이 '몇 개'인지를 세는 함수다. 이름도 구조도 SUMIF와 매우 닮았지만, 자세히 들여다보면 미묘하지만 중요한 차이가 하나 숨어 있다. COUNTIF의 기본 구조 =COUNTIF(A2:A100, "결석") COUNTIF는 조건을 검사할 범위와 조건, 이렇게 두 개의 인수만 받는다. A2:A100 범위에서 "결석"이라는 값과 일치하는 셀이 몇 개인지를 세어 그 개수를 반환한다. SUMIF와 COUNTIF의 구조적 유사성 지난 글에서 SUMIF의 원리를 "조건 범위를 참/거짓 배열로 바꾸고, 그 배열을 합계 범위 위에 겹쳐서 참인 위치만 더한다"고 설명했다. COUNTIF도 앞부분까지는 완전히 동일하다. 조건 범위를 검사해서 참/거짓 배열을 만드는 과정까지는 똑같다. 차이는 그다음이다. SUMIF는 이 배열을 다른 범위(합계 범위) 에 겹쳐서 값을 더하지만, COUNTIF는 겹칠 다른 범위 자체가 필요 없다. 그냥 참/거짓 배열에서 TRUE의 개수만 세면 끝나기 때문이다. 즉 "무엇을 더할지"를 지정할 필요가 없으므로 인수가 하나 줄어드는 것이다. 이렇게 보면 COUNTIF(범위, 조건)는 개념적으로 SUMIF(범위, 조건, 참거짓배열자체) 와 비슷한 일을 하는 셈이다. COUNTIFS — 여러 조건의 동시 만족 =COUNTIFS(A2:A100, "결석", B2:B100, ">=3") COUNTIFS 역시 SUMIFS와 동일한 방식으로 확장된다. 각 조건 범위마다 참/거짓 배열을 만들고, 이 배열들을...

[엑셀] SUMIF/SUMIFS — 조건부 집계의 내부 동작 원리조건 배열과 합계 배열이 어떻게 짝지어지는가

 매출 데이터에서 "지역이 서울인 매장의 매출 합계"를 구해야 하는 상황을 떠올려보자. 손으로 하나씩 골라 더할 수도 있겠지만, 행이 수천 개라면 이야기가 달라진다. 이럴 때 등장하는 함수가 SUMIF다. 그런데 정작 "SUMIF가 정확히 어떤 방식으로 조건에 맞는 값만 골라내는가"를 설명해보라고 하면 의외로 막히는 경우가 많다. 이번 글에서는 SUMIF와 SUMIFS의 겉모습이 아니라, 그 내부에서 벌어지는 계산 원리를 뜯어본다. SUMIF의 기본 구조 복습 SUMIF는 세 개의 인수를 받는다. 조건을 검사할 범위, 그 조건 자체, 그리고 실제로 합산할 범위다. =SUMIF(A2:A100, "서울", C2:C100) 여기서 A2:A100은 지역명이 적힌 열, C2:C100은 매출액이 적힌 열이다. 겉으로는 단순히 "서울인 것만 더해줘"라는 명령처럼 보이지만, 내부적으로는 좀 더 구조적인 일이 벌어진다. 조건 배열과 합계 배열이 짝지어지는 방식 SUMIF는 먼저 조건 범위(A2:A100)의 각 셀을 하나씩 검사해서, "서울"과 일치하면 TRUE, 아니면 FALSE로 이루어진 하나의 논리값 배열을 머릿속으로 만든다고 생각하면 이해하기 쉽다. 예를 들어 A2가 "서울", A3이 "부산", A4가 "서울"이라면 그 결과는 {TRUE, FALSE, TRUE, ...} 와 같은 배열이 된다. 그다음 이 TRUE/FALSE 배열을 합계 범위(C2:C100)와 같은 위치끼리 짝지어 대응시킨다. A2가 TRUE이므로 C2의 값을 채택하고, A3이 FALSE이므로 C3의 값은 버리고, A4가 TRUE이므로 C4의 값을 채택하는 식이다. 결국 SUMIF는 "조건 범위에서 만든 참/거짓 지도를, 합계 범위 위에 그대로 겹쳐 놓고, 참인 위치의 값들만 골라 더하는" 함수라고 이해할 수 있다. 이 때문에 조건 범위와 합계 ...

[엑셀] IFS와 SWITCH 다중분기를 표현하는 두 가지 방식 순차평가 vs 값 매칭의 차이

 학점 계산 시트를 만들어본 적이 있다면 한 번쯤 이런 수식을 마주쳤을 것이다. =IF(B2>=90,"A",IF(B2>=80,"B",IF(B2>=70,"C",IF(B2>=60,"D","F")))) 괄호가 네 겹, 다섯 겹 겹쳐지면서 어디서 어디까지가 하나의 조건인지 눈으로 쫓아가기가 점점 힘들어진다. 조건을 하나 더 추가하려고 괄호 개수를 세다가 실수로 하나를 빠뜨려 본 경험도 있을 것이다. 이 글에서는 이런 중첩 IF의 한계를 짚어보고, 이를 대체할 수 있는 IFS와 SWITCH 함수가 각각 어떤 원리로 동작하는지 살펴본다. 중첩 IF는 왜 한계에 부딪히는가 중첩 IF 자체가 잘못된 방법은 아니다. 다만 조건이 늘어날수록 두 가지 문제가 함께 커진다. 첫째는 가독성이다. IF 안에 IF가 들어가는 구조는 사람이 눈으로 괄호의 짝을 맞춰가며 읽어야 하는데, 조건이 4~5개를 넘어가면 이 과정 자체가 실수의 원인이 된다. 둘째는 수정의 어려움이다. 중간에 조건 하나를 끼워 넣으려면 괄호 구조 전체를 다시 손봐야 하는 경우가 많다. 엑셀은 이론적으로 IF를 64단계까지 중첩할 수 있도록 허용하지만, 실무에서는 그 한계에 도달하기 훨씬 전에 이미 유지보수가 불가능한 수식이 되어버린다. 즉 '몇 단계까지 가능한가'보다 '몇 단계부터 사람이 이해하기 어려워지는가'가 실질적인 한계선이다. IFS 함수의 원리 — 순차평가라는 개념 IFS는 여러 개의 '조건, 결과값' 쌍을 나열해두면, 엑셀이 이를 위에서부터 순서대로 하나씩 검사 하다가 처음으로 TRUE가 되는 조건을 만나는 순간 그 결과값을 반환하고 나머지는 검사하지 않는 구조다. 이것이 바로 '순차평가(sequential evaluation)'다. 중첩 IF가 괄호로 조건들을 층층이 감싸는 방식이었다면, IFS는 조건과 결과를 평면적으로 나열한다는 점이 ...