왜 슬라이싱이 중요한가 — 리포트가 무거워지는 첫 번째 이유는 필요 없는 열과 행이 계속 따라다니기 때문입니다. 원본 표는 수집과 저장에 적합하도록 구성되는 반면, 분석과 설명에는 더 작은 표가 적합합니다. 열을 가볍게 고르고, 행을 목적에 맞게 잘라내는 두 가지 동작만 안정적으로 자동화해도 계산량은 줄고 가독성은 올라갑니다. 이 글은 Excel 365와 Google Sheets에서 CHOOSECOLS
로 열을 선택하고 CHOOSEROWS
로 행 범위를 동적으로 자르는 방법을 실무 관점에서 정리합니다. 상단에 샘플 CSV와 결과 CSV를 제공하니 그대로 내려받아 같은 결과를 재현하실 수 있습니다.
자료 내려받기
- 샘플 원본 CSV: A3_choosecols_sample.csv
- 결과 CSV(핵심 열만 남기고 최근 7행으로 슬라이싱): A3_choosecols_result.csv
샘플 데이터 설명
원본은 일별 판매 로그를 가정합니다. 분석에서는 매출과 마진만 확인하면 되므로 계산 열을 만든 뒤 필요한 열만 남기고 최근 7일만 추출합니다.
원본 파일 A3_choosecols_sample.csv
컬럼 | 의미 | 예시 | 비고 |
---|---|---|---|
date |
거래일 | 2025-07-24 | YYYY-MM-DD |
product |
상품명 | Notebook | 문자열 |
region |
지역 | Seoul | 문자열 |
channel |
채널 | Online | 문자열 |
qty |
수량 | 3 | 정수 |
price |
단가 | 2400 | 정수 원 단위 |
discount_rate |
할인율 | 0.1 | 소수 |
cost |
원가 | 1200 | 정수 원 단위 |
결과 파일 A3_choosecols_result.csv
컬럼 | 의미 | 예시 | 계산식 개념 |
---|---|---|---|
date |
거래일 | 2025-07-25 | 원본 유지 |
product |
상품명 | Marker | 원본 유지 |
qty |
수량 | 9 | 원본 유지 |
revenue |
매출액 | 13620.15 | qty×price×(1−discount_rate) |
margin |
마진액 | 1695.15 | revenue−qty×cost |
원리 한 장 요약
CHOOSECOLS(array, cols…)
는 배열에서 지정한 열만 남기고, CHOOSEROWS(array, rows…)
는 지정한 행만 남깁니다. 포인트는 두 가지입니다. 첫째, 헤더 이름이 바뀌거나 열 순서가 달라져도 깨지지 않도록 열 인덱스를 동적으로 계산합니다. 둘째, 최근 N행처럼 움직이는 행 범위를 만들 때는 전체 행 수를 기반으로 인덱스 목록을 생성합니다.
Excel 365 수식 레시피
- 계산 열 만들기
=LET(t, Table1, rev, t[qty]*t[price]*(1-t[discount_rate]), mar, rev - t[qty]*t[cost], HSTACK(t[date], t[product], t[qty], rev, mar))
설명: 테이블Table1
에서 계산된rev
와mar
를 만들어 원하는 순서로HSTACK
합니다. 이 한 덩어리가 이후 슬라이싱의 입력array
가 됩니다. - 필요 열만 남기기 헤더 명칭이 바뀌어도 안전하게 유지하려면 인덱스를 헤더 행에서 찾아야 합니다. 이미
HSTACK
한 배열은 열 순서가 고정되어 있으니 간단히CHOOSECOLS
로 선택합니다.=LET(t, Table1, rev, t[qty]*t[price]*(1-t[discount_rate]), mar, rev - t[qty]*t[cost], arr, HSTACK(t[date], t[product], t[qty], rev, mar), CHOOSECOLS(arr, {1,2,3,4,5}))
- 최근 7행만 자르기
CHOOSEROWS
에SEQUENCE
로 만든 행 인덱스를 넣습니다.=LET(out, 위식의_결과, n, 7, r, ROWS(out), idx, SEQUENCE(n, 1, r-n+1, 1), CHOOSEROWS(out, idx))
해석: 전체 행이 r개일 때 마지막 7행의 시작 위치는 r−7+1입니다. 그 위치부터 1씩 증가하는 n개의 인덱스를 만들어 넘깁니다. - 한 줄로 합치기
=LET(t,Table1, rev,t[qty]*t[price]*(1-t[discount_rate]), mar,rev - t[qty]*t[cost], arr,HSTACK(t[date],t[product],t[qty],rev,mar), n,7, r,ROWS(arr), idx,SEQUENCE(n,1,r-n+1), CHOOSEROWS(arr, idx))
Google Sheets 수식 레시피
- 계산 열과 열 선택
=LET( d, A2:H, rev, INDEX(d,,5)*INDEX(d,,6)*(1-INDEX(d,,7)), mar, rev - INDEX(d,,5)*INDEX(d,,8), arr, HSTACK(INDEX(d,,1), INDEX(d,,2), INDEX(d,,5), rev, mar), CHOOSECOLS(arr, 1,2,3,4,5) )
설명: 원본이 A:H라고 가정하고 열 번호로 접근합니다. - 최근 7행
=LET(out, 위식의_결과, n,7, r,ROWS(out), idx,SEQUENCE(n,1,r-n+1), CHOOSEROWS(out, idx))
슬라이싱 설계 체크리스트
- 행 선택은 항상 전체 행 수를 기준으로 만드는지 확인합니다. 고정된 A20 같은 인덱스를 쓰면 데이터가 늘어날 때 잘립니다.
- 열 선택은 수식 내부에서 계산되거나 별도 키 테이블에 정의된 명단을 기반으로 합니다. 이름이 바뀌면 헤더에서 다시 찾아 인덱스를 계산하는 패턴이 안전합니다.
- 계산 열과 선택 동작을 분리하면 디버깅이 쉬워집니다. 한 셀 안에 모두 넣었다면
LET
으로 단계 이름을 정해 가독성을 확보합니다.
검증 스니펫
-- 열 개수 확인
=COLUMNS(최종_배열) = 5
-- 행 개수 확인
=ROWS(최종_배열) = 7
-- 매출 합계 검증
=SUM(INDEX(최종_배열,,4)) = SUM(원본[qty]*원본[price]*(1-원본[discount_rate]))
-- 마진 마지막 누계는 매출−원가누계와 일치
=SUM(INDEX(최종_배열,,5)) = SUM(원본[qty]*원본[price]*(1-원본[discount_rate])) - SUM(원본[qty]*원본[cost])
현장에서 자주 발생하는 문제와 대처
열 순서가 바뀐다 — 데이터를 가져오는 쿼리나 업스트림 시트에서 열 순서가 바뀌면 고정 인덱스 기반 CHOOSECOLS는 깨집니다. 이때는 헤더 행을 XMATCH
로 조회해 원하는 열 번호 집합을 동적으로 만들고 그 결과를 CHOOSECOLS
에 넘기면 됩니다. 예시처럼 계산 열을 먼저 만들어 HSTACK
한 경우에는 열 순서가 이미 고정되므로 단순 인덱싱이 더 빠릅니다.
최근 N행이 아닌 날짜 조건이 필요하다 — CHOOSEROWS
는 명시 인덱스 기반이므로 날짜 조건 필터와 함께 쓰려면 조건으로 가려낸 배열을 우선 만들고 그 결과에 행 선택을 적용합니다. 예를 들어 한 달 간 데이터만 남긴 배열을 FILTER
로 만들고, 이후 CHOOSEROWS
로 상위 K행을 가져오는 식입니다.
계산 열이 많아 느리다 — 계산 열을 모두 만든 다음 슬라이싱하면 로직은 깔끔하지만 속도가 느릴 수 있습니다. 보고에 필요한 열만 계산하도록 LET
내부에서 계산 대상을 최소화하고, 반복 계산은 변수에 담아 재사용합니다.
응용 패턴
- 보고서 구조 사전과 결합 보고서가 요구하는 열 순서를 별도 범위에 적어 두고,
XMATCH
로 인덱스를 찾아CHOOSECOLS
에 넘깁니다. 열 이름이 바뀌어도 사전만 고치면 됩니다. - 그룹별 최근 K행 제품별로 최근 K행을 가져오려면 제품 단위로 정렬한 뒤 그룹별 순번을 만들고 그 순번이 K 이하인 행만 필터링합니다. 그 결과 배열에
CHOOSECOLS
로 필요한 열만 남깁니다. - 머지 없이 문장화 슬라이스 결과만으로도 월간 요약 문장을 만들 수 있습니다. 예를 들어 마지막 7일의 매출 합계를 만들어 한 문장으로 출력하면 대시보드 없이도 보고가 가능합니다.
마무리
슬라이싱은 작은 일처럼 보이지만 리포트의 체감 성능과 유지보수 난이도를 좌우합니다. CHOOSECOLS
로 열을 정확히 고르고, CHOOSEROWS
로 행을 상황에 맞게 자르는 습관을 들이면 복잡한 UI나 수작업 없이도 분명하고 가벼운 표를 지속적으로 생산할 수 있습니다. 위 CSV 두 개를 내려받아 본문 수식과 함께 적용해 보시기 바랍니다. 같은 구조의 여러분 데이터에도 바로 이식됩니다.