
엑셀 동적 배열 — FILTER·SORT·UNIQUE·TAKE·DROP·CHOOSECOLS/ROWS·WRAPROWS/WRAPCOLS·TOCOL/TOROW 완전 가이드
편집자 검수: Excel 365 기준으로 직접 재현·검증한 절차이며, 초안 정리에 AI 도구를 보조적으로 활용했습니다.
연계 가이드(내부 링크 8개)
1) 핵심 문법 & 스필(#)
- 동적 배열은 결과가 여러 셀로 자동 스필됩니다. 첫 셀만 수식, 나머지는 가상 채움.
- 스필 전체 참조:
=A2# - 대표 시그니처:
// FILTER(범위, 조건, [없을 때]) =FILTER(SalesTbl, SalesTbl[Region]="Seoul", "없음") // SORT(범위, [열위치], [순서], [기준=1:행, 0:열]) =SORT(FILTER(SalesTbl, SalesTbl[Qty]>0), 3, -1)
2) 실무 패턴 12가지(복붙용)
① 고유 카테고리 정렬
=SORT(UNIQUE(SalesTbl[Category]))
② 다중 조건 필터(AND)
=FILTER(SalesTbl, (SalesTbl[Region]=$H$2)*(SalesTbl[Month]=$I$2))
③ OR 조건
=FILTER(SalesTbl, (SalesTbl[Region]="Seoul")+(SalesTbl[Region]="Busan"))
④ 텍스트 포함 검색
=FILTER(SalesTbl, ISNUMBER(SEARCH($H$2, SalesTbl[Item])))
⑤ 상위 N by 금액
=TAKE(SORT(SalesTbl, XMATCH(SalesTbl[Amount], SalesTbl[Amount],0,1), -1), $H$2)
⑥ 최근 N일
=FILTER(SalesTbl, SalesTbl[Date]>=TODAY()-$H$2)
⑦ 중복 제거 후 카운트
=ROWS(UNIQUE(SalesTbl[CustomerID]))
⑧ 비어 있지 않은 값만 추출
=FILTER(SalesTbl[Note], SalesTbl[Note]<>"")
⑨ 다열 반환에서 특정 열만
=CHOOSECOLS(FILTER(SalesTbl, SalesTbl[Region]=$H$2), 1,3,5)
⑩ 정렬 기준 다중
=SORT(SalesTbl, {3,2}, {-1,1}) // 3열 내림, 2열 오름
⑪ 페이지네이션(한 화면 N행)
=TAKE(DROP(SORT(SalesTbl,1,1), ($H$2-1)*$H$3), $H$3)
⑫ 유효성 드롭다운 소스
=SORT(UNIQUE(FILTER(SalesTbl[Item], SalesTbl[Category]=$H$2)))
3) 모양 바꾸기 — TAKE/DROP/CHOOSECOLS/WRAP
// 위에서 10행
=TAKE(SalesTbl, 10)
// 첫 2열만
=CHOOSECOLS(SalesTbl, 1,2)
// 3열 삭제
=DROP(SalesTbl, 0, 3)
// 1열 리스트를 3열 격자로 재배치
=WRAPROWS(SalesTbl[Item], 3)
TIP CHOOSECOLS/ROWS는 보고서 열 순서를 바꾸거나 숨길 때 가장 깔끔한 방법.
4) TOCOL/TOROW — 평탄화·재조합
// 여러 열을 세로 하나로 평탄화
=TOCOL(CHOOSECOLS(SalesTbl,2,3,4), 1)
// 행으로 평탄화
=TOROW(FILTER(SalesTbl[Item], SalesTbl[Qty]>0), 1)
이후 UNIQUE·SORT로 후처리하면 다차원 목록을 한 번에 정리 가능.
5) 성능 팁 & 오류 해결
- #SPILL!: 스필 영역 비우기, 병합 셀 해제, 표 밖으로 결과를 내보내기
- #CALC!: 배열 크기 불일치(열 수/행 수) 점검
- 전체열 참조(
A:A) 남발보다 표(Table) 열 참조 권장 - 전처리는 Power Query로 → 동적 배열은 뷰/리스트 출력을 담당
- 오류 메시지는 IFERROR로 표준화
6) 재방문 과제 & 템플릿
과제 A — “실시간 검색” 리스트
=FILTER(SalesTbl, ISNUMBER(SEARCH($H$1, SalesTbl[Item])))
과제 B — “상위 N & 카테고리별” 보드
=LET(cat,$J$2, top,$J$3, TAKE(SORT(FILTER(SalesTbl, SalesTbl[Category]=cat), 3, -1), top))
이 글을 북마크하고 다음 달에 Table → Dynamic Array → Data Validation으로 이어지는 자동화 플로우를 재현하세요.