FILTER · SORT · UNIQUE로 데이터 전처리 끝! (조건 필터·다중 정렬·중복 제거 1분 컷)

FILTER SORT UNIQUE — 꽁이가 필터 토글을 누르고 A→Z 카드를 정렬하며 UNIQUE 병에 칩을 넣는 에디터 콘셉트
FILTER · SORT · UNIQUE로 데이터 전처리 끝! (조건 필터·다중 정렬·중복 제거 1분 컷)

FILTER · SORT · UNIQUE로 데이터 전처리 끝! (조건 필터·다중 정렬·중복 제거 1분 컷)

피벗 전 전처리 파이프라인을 한 줄 수식으로 자동화! OR/AND, 날짜 범위, 사용자 정의 정렬, 고유 목록까지 이 글 하나로 끝냅니다.

검수 고지: 이 글은 편집자가 실제 Excel 365에서 재현·검증했으며, 초안 정리 단계에서 AI 도구를 보조적으로 사용했습니다.

문법 & 빠른 시작

함수형식포인트
FILTER=FILTER(array, include, [if_empty])조건식 TRUE/FALSE 배열
SORT=SORT(array,[sort_index],[sort_order],[by_col])단일 열 기준 간편
SORTBY=SORTBY(array, by_array1, sort_order1, [by_array2, sort_order2]…)열별 세밀 제어
UNIQUE=UNIQUE(array,[by_col],[exactly_once])행/열 고유, 1회만 값
// 예: 2025년, 지역=Seoul, 매출 내림차순 TOP 20
=TAKE(SORTBY(FILTER(A2:F10000,
   (YEAR(Date)=2025)*(Region="Seoul")), Sales, -1), 20)

FILTER — 조건식 레시피

AND / OR / NOT

// AND: 곱(*)
=FILTER(Data, (Region="Seoul")*(Category="Keyboard"))

// OR: 합(+)
=FILTER(Data, (Region="Seoul")+(Region="Busan"))

// NOT: 부정
=FILTER(Data, Category<>"Returns")

부분일치/와일드카드

=FILTER(Data, ISNUMBER(SEARCH("pro", LOWER(Product))))

날짜 범위(시각 섞임 안전형)

=FILTER(Data, (Date>=&DATE(2025,1,1))*(Date<EOMONTH(DATE(2025,1,1),2)+1))

결측치 제외

=FILTER(Data, (Value<>"")*(Value<>#N/A))

SORT / SORTBY — 다중 정렬

단일 키

=SORT(Data, 4, -1)   // 4번째 열 내림차순

다중 키

=SORTBY(Data, Region, 1, Sales, -1)

사용자 정의 순서(라벨 우선순위)

=SORTBY(Data, XLOOKUP(Priority, {"High","Medium","Low"}, {1,2,3}), 1, Date, -1)

UNIQUE — 고유 목록·개수

고유 목록

=UNIQUE(Category)

고유 개수

=ROWS(UNIQUE(CustomerID))

“한 번만 나타난 값”

=UNIQUE(Category,, TRUE)   // exactly_once=TRUE

파이프라인 조합

// 1) 필터 → 정렬 → 중복 제거
=UNIQUE(SORTBY(FILTER(A2:D, Dept="Sales"), Date, -1))

// 2) 고유 고객의 최신 주문
=LET(c, UNIQUE(Customer),
     latest, MAP(c, LAMBDA(x, MAX(FILTER(Date, Customer=x)))),
     HSTACK(c, latest))

실무 패턴 12가지

① 최근 30일 상위 매출 10건

=TAKE(SORTBY(FILTER(Data, Date>=TODAY()-30), Sales, -1), 10)

② 지역×월 교차표 원본 만들기

=LET(m, EOMONTH(Date,0), r, UNIQUE(Region),
MAKEARRAY(ROWS(r), ROWS(UNIQUE(m)),
 LAMBDA(i,j, SUM(FILTER(Sales, (Region=INDEX(r,i))*(m=INDEX(UNIQUE(m),j)))))))

③ ‘재구매 고객’만

=FILTER(Data, COUNTIF(Customer, Customer)>1)

④ 품절 제외 + 재고 오름차순

=SORTBY(FILTER(Data, Stock>0), Stock, 1)

⑤ 키워드 다건 OR 검색

=FILTER(Data, BYROW(Product, LAMBDA(r, SUM(--ISNUMBER(SEARCH(TRANSPOSE(Keywords), r)))>0 )))

⑥ 담당자별 최신 상태

=LET(u, UNIQUE(Owner),
 HSTACK(u, MAP(u, LAMBDA(x, TAKE(SORTBY(FILTER(Data, Owner=x), Date, -1),1)))))

⑦ 정확히 한 번만 등장한 주문

=FILTER(Data, COUNTIF(OrderID, OrderID)=1)

⑧ 고객 고유 목록 + 첫 구매일

=LET(c, UNIQUE(Customer), HSTACK(c, MAP(c, LAMBDA(x, MIN(FILTER(Date, Customer=x))))))

⑨ 상위 N% 매출만

=LET(t, LARGE(Sales, ROUNDUP(COUNTA(Sales)*0.2,0)),
 FILTER(Data, Sales>=t))

⑩ 우선순위(사용자 정의) → 날짜 내림

=SORTBY(Data, XLOOKUP(Priority,{"P0","P1","P2","P3"},{0,1,2,3}), 1, Date, -1)

⑪ 부서별 고유 인원수

=LET(d, UNIQUE(Dept), HSTACK(d, MAP(d, LAMBDA(x, ROWS(UNIQUE(FILTER(Name, Dept=x)))))))

⑫ 필터 결과가 없으면 메시지

=IFERROR(FILTER(Data, Region="Mars"), "조건에 맞는 데이터가 없습니다")

구버전 대체식 (FILTER/SORT/UNIQUE 미지원)

// FILTER ≈ INDEX/SMALL/IF (배열식; 365는 일반식)
=IFERROR(INDEX(A:A, SMALL(IF(조건, ROW(A:A)), ROWS($A$1:A1))), "")

// SORT ≈ SORTBY 대체: 헬퍼열로 키를 만들고 INDEX로 재배열
=INDEX(Data, MATCH(SMALL(키, ROWS($A$1:A1)), 키, 0), )

// UNIQUE ≈ 고급 필터 또는 피벗테이블 → 고유값

TIP 배포용 파일은 표(CTRL+T)로 만들고 열 이름으로 수식을 작성하면 안정적입니다.

자주 하는 실수 & 체크

  • #SPILL! → 스필 범위가 비어 있는지 확인(병합/메모/숨김 열 제거).
  • 데이터 형식 → 날짜/숫자/텍스트 형식 혼합 시 NUMBERVALUE/DATEVALUE로 정규화.
  • OR 기대 → FILTER의 OR은 + 합. AND는 * 곱.
  • 성능 → 대규모 시트는 LET로 중복 계산 캐시, 범위는 표 열로 한정.

요약

목표대표 공식
조건 필터FILTER(array, 조건)
다중 정렬SORTBY(array, 키1,정렬, 키2,정렬)
중복 제거/개수UNIQUE(array) / ROWS(UNIQUE(...))
파이프라인FILTER → SORTBY → UNIQUE
지금 사용하는 “다운로드 전처리 시트”를 FILTER→SORTBY→UNIQUE 파이프라인으로 바꿔 보세요. 수기 작업이 사라지고 보고서가 자동으로 갱신됩니다.

Leave a Reply

Your email address will not be published. Required fields are marked *