이때, 두번째 인수인 집계할 값이 숫자만 해당이 되는 이유는 세번째 인수인 함수가 SUM, AVERAGE, COUNT 등이 기본적으로 숫자집계함수이기 때문입니다. 물론 , COUNTA 자체는 원래 숫자나 문자 가리지 않고 비어있지 않은 셀 개수를 세는 함수이기 하지만 집계 인수로 넘겼을 때 #VALUE!가 나는 이슈가 있습니다.
GPT의 설명대로, GROUPBY는 배열, 범위(Range), 컬럼 기반 데이터를 받아 동작하지만, 그렇다고, GPT의 결론인 "내부함수인 LAMDA가 빈 셀을 빈 문자열(" ")로 변환하여 COUNTA로 값이 있다고 착각한다는 접근"은 오해가 있는 결론일 수 있습니다.
GROUPBY 함수는 배열, 범위(Range),열(컬럼)을 인수로 받는 동적 배열 함수입니다. 겉으로는 일반 범위를 받는 것처럼 보이지만, 실제 동작은 “행(레코드)” 단위로 이뤄집니다.
특히 구조적 참조인 표1[이름], 표1[점수]를 사용하면, GROUPBY는 DAX처럼 “진짜 테이블 객체”를 다루는 것은 아니지만, Excel 테이블(ListObject)을 하나의 레코드 집합처럼 인식해서 먼저 이름 기준으로 행들을 그룹화하고 각 그룹에 대해 지정된 열(values 인수)을 집계합니다.
이때, 집계 함수로 COUNTA를 쓰면, 동작을 이렇게 이해할 수 있습니다. GROUPBY는 먼저 “이 그룹에 속한 행(레코드)이 몇 개 있는가”를 기준으로 묶고 그 그룹에 속한 집계 대상 열의 셀들을 보고, 비어 있지 않은 항목을 카운트합니다.
따라서 “진구”처럼 테이블에 행 자체는 존재하지만, 점수 셀이 비어 있는 경우에도 그 행은 이미 그룹의 레코드로 포함되어 있기 때문에 COUNTA 입장에서는 “해당 그룹에 1건의 레코드가 있다”는 식으로 처리되어 결과가 1로 집계되는 것처럼 나타납니다.
즉, GROUPBY와 COUNTA 조합은 완전히 빈 셀만 보는 것이 아니라, “그룹에 속한 레코드 존재 여부”를 함께 반영하는 방식으로 동작한다고 이해하는 것이 자연스럽습니다.
2025.11.04
좋아요
원조백수Lv.30
GroupBy와 PivotBy의 함수가 데이터를 처리하는 방법의 문제로 보이네요. 실제 COUNTA를 셀 영역에 사용할 경우 빈셀은 그대로 무시되는데, 다른 함수를 한 번 거치면 빈셀은 아마도 내부적으로 다른 값으로 치환되어 전달되는 듯 합니다. 이 전달된 값이 통계함수에서 계산이 되는 것이 원인으로 보입니다.
C API를 .NET으로 사용가능하게 하는 ExcelDNA에서도 빈셀은 ExcelEmpty라고 별도로 정의하여 사용되고, 이를 사용한 통계에서도 count하는 것으로 나옵니다.
아래를 보시면 수식으로 "" 빈문자열을 만든 것과 실제 빈셀일 때, 같은 COUNTA 함수가 다른 함수를 거친 경우 다른 결과를 보여주는 것이 보입니다.
COUNT로 하세요
제가 편의상 점수 즉, 숫자를 넣었는데, 저 점수칸에 텍스트 형태의 값을 넣어야해서 count 함수를 쓸 수가 없어요.
=GROUPBY(표1[이름],표1[점수], LAMBDA(x, COUNT(1/(x<>""))),0,1)
답변 감사합니다! 근데 아래에도 제가 썼지만, 왜 처음에 제가 시도한 방법은 문제가 생기는지 원인을 알고 싶어요 ㅠㅠ
전 counta함수 안쓰고 안믿어요..^^
아래 이미지 참고하세요
네 저도 필터 인수를 활용하여 해결은 했는데, '왜'안되는지가 이해가 안 돼서요. 말씀해주신 '빈 셀도 하나의 그룹으로 인식'한다는 걸 조금만 더 설명해주실 수 있나요?
더 이상 어떻게 ..
=LET(xFT,FILTER(표1,표1[점수]<>""), GROUPBY(INDEX(xFT,,1),INDEX(xFT,,2),COUNTA))
안녕하세요~
1. GROUPBY함수에 적용되는
COUNT함수는 열값이 숫자일 경우에만 적용이 됩니다.
왜냐하면,
일단 GROUPBY를 실행하려면 인수 3개가 필요한데,
첫번째 인수는, "무엇을 그룹화할 것인가"이고,
두번째 인수는 "집계할 값"이 필요하고,
세번째 인수는 "집계에 사용하려는 함수"입니다.
https://techcommunity.microsoft.com/blog/microsoft365insiderblog/new-aggregation-functions-in-excel-groupby-and-pivotby/4222707
이때, 두번째 인수인 집계할 값이 숫자만 해당이 되는 이유는
세번째 인수인 함수가 SUM, AVERAGE, COUNT 등이
기본적으로 숫자집계함수이기 때문입니다.
물론 ,
COUNTA 자체는 원래 숫자나 문자 가리지 않고
비어있지 않은 셀 개수를 세는 함수이기 하지만
집계 인수로 넘겼을 때 #VALUE!가 나는 이슈가 있습니다.
따라서
에서 점수열이
문자일 경우에는 모두 #value를 반환합니다.
2. 점수열이 숫자일 경우에
는 모두 정상적으로 그룹핑을 하여,
이렇게 값을 반환합니다.
3. 질문자님께서
원하시는 내용은 D열 값이 문자열일 경우,
카운트가 0으로 나오게 하고 싶은 거 같습니다.
이럴 경우에는
두번째 인수열인 문자열을 숫자로 값으로 변환해서
그룹핑을 해서 수식을 설정해야 합니다,
IF(표1[등급]<>"", 1, 0)
이 수식은 각 행에 대해 “등급이 있으면 1, 없으면 0”으로 변환해서
SUM으로 각 그룹별로 1과 0을 더하도록 합나다.
즉, 이름별로 등급이 있는 행 개수를 계산한다고 보면 됩니다.
덧붙이자면,
다른 수식을 이용해서 작업하는 방법도 있습니다.
=LET( n, 표1[이름], g, 표1[등급], u, UNIQUE(n), c, MAP(u, LAMBDA(k, COUNTIFS(n, k, g, "<>"))), VSTACK( HSTACK(u, c), HSTACK("합계", SUM(c)) ) )
이렇게 넣으면,
당연히 진구는 1입니다.
GROUPBY 함수는
표1[이름]을 그룹핑해서 표1[점수]를 집계하는 함수인데,
무엇을 집계하는 가를 결정하는 게, 세번째 함수입니다.
그럼,
이렇게 넣으면,
표1의 점수를 모두 이름별로 합계를 합니다.
이렇게 넣으면,
무엇을 카운트할 까요?
당연히,
표1[이름]으로 그룹핑 된 표1[점수]의 행수를 카운트합니다.
그래서 표1[점수]가 값이 있든 없든 표[이름]으로 묶인,
존재하는 행의 수를 카운트하게 됩니다.
즉,
진구는 몇 개의 행이 그룹핑 되었는가를 카운트합니다.
그러하니,
아래에서 진구는 몇 개 행이 카운트 될까요?
당연히 3입니다~
그러나,
이 수식은
정확하게
진구라는 이름으로 묶인 숫자 행들의 갯수를 카운트하여
값 1를 반환합니다~
수미수라는 분이 댓글이 달아주셨다고 메일이 왔는데 찾지를 못하겠네요. '값'과 참조를 구분하지 못했던 것 같습니다.
Gpt가 이렇게 알려줬습니다.
GPT의 설명대로,
GROUPBY는 배열, 범위(Range), 컬럼 기반 데이터를 받아 동작하지만,
그렇다고,
GPT의 결론인 "내부함수인 LAMDA가 빈 셀을 빈 문자열(" ")로 변환하여
COUNTA로 값이 있다고 착각한다는 접근"은
오해가 있는 결론일 수 있습니다.
GROUPBY 함수는
배열, 범위(Range),열(컬럼)을 인수로 받는 동적 배열 함수입니다.
겉으로는 일반 범위를 받는 것처럼 보이지만,
실제 동작은 “행(레코드)” 단위로 이뤄집니다.
https://support.microsoft.com/en-us/office/groupby-function-5e08ae8c-6800-4b72-b623-c41773611505
특히 구조적 참조인
표1[이름], 표1[점수]를 사용하면,
GROUPBY는 DAX처럼 “진짜 테이블 객체”를 다루는 것은 아니지만,
Excel 테이블(ListObject)을 하나의 레코드 집합처럼 인식해서
먼저 이름 기준으로 행들을 그룹화하고
각 그룹에 대해 지정된 열(values 인수)을 집계합니다.
이때,
집계 함수로 COUNTA를 쓰면, 동작을 이렇게 이해할 수 있습니다.
GROUPBY는 먼저 “이 그룹에 속한 행(레코드)이 몇 개 있는가”를 기준으로 묶고
그 그룹에 속한 집계 대상 열의 셀들을 보고, 비어 있지 않은 항목을 카운트합니다.
따라서 “진구”처럼 테이블에 행 자체는 존재하지만, 점수 셀이 비어 있는 경우에도
그 행은 이미 그룹의 레코드로 포함되어 있기 때문에
COUNTA 입장에서는 “해당 그룹에 1건의 레코드가 있다”는 식으로 처리되어
결과가 1로 집계되는 것처럼 나타납니다.
즉,
GROUPBY와 COUNTA 조합은
완전히 빈 셀만 보는 것이 아니라,
“그룹에 속한 레코드 존재 여부”를 함께 반영하는 방식으로
동작한다고 이해하는 것이 자연스럽습니다.
GroupBy와 PivotBy의 함수가 데이터를 처리하는 방법의 문제로 보이네요.
실제 COUNTA를 셀 영역에 사용할 경우 빈셀은 그대로 무시되는데,
다른 함수를 한 번 거치면 빈셀은 아마도 내부적으로 다른 값으로 치환되어 전달되는 듯 합니다.
이 전달된 값이 통계함수에서 계산이 되는 것이 원인으로 보입니다.
C API를 .NET으로 사용가능하게 하는 ExcelDNA에서도 빈셀은 ExcelEmpty라고 별도로 정의하여 사용되고,
이를 사용한 통계에서도 count하는 것으로 나옵니다.
아래를 보시면 수식으로 "" 빈문자열을 만든 것과 실제 빈셀일 때, 같은 COUNTA 함수가 다른 함수를 거친 경우 다른 결과를 보여주는 것이 보입니다.
