본문 바로가기
카테고리 없음

CHOOSECOLS와 CHOOSEROWS로 분석용 칼럼 슬라이싱 완전 정복

by 시트자동화 2025. 8. 16.

choosecols 샘플 데이터 관련 이미지
choosecols 샘플 데이터

왜 슬라이싱이 중요한가 — 리포트가 무거워지는 첫 번째 이유는 필요 없는 열과 행이 계속 따라다니기 때문입니다. 원본 표는 수집과 저장에 적합하도록 구성되는 반면, 분석과 설명에는 더 작은 표가 적합합니다. 열을 가볍게 고르고, 행을 목적에 맞게 잘라내는 두 가지 동작만 안정적으로 자동화해도 계산량은 줄고 가독성은 올라갑니다. 이 글은 Excel 365와 Google Sheets에서 CHOOSECOLS로 열을 선택하고 CHOOSEROWS로 행 범위를 동적으로 자르는 방법을 실무 관점에서 정리합니다. 상단에 샘플 CSV와 결과 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 수식 레시피

  1. 계산 열 만들기 =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에서 계산된 revmar를 만들어 원하는 순서로 HSTACK합니다. 이 한 덩어리가 이후 슬라이싱의 입력 array가 됩니다.
  2. 필요 열만 남기기 헤더 명칭이 바뀌어도 안전하게 유지하려면 인덱스를 헤더 행에서 찾아야 합니다. 이미 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}))
  3. 최근 7행만 자르기 CHOOSEROWSSEQUENCE로 만든 행 인덱스를 넣습니다. =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개의 인덱스를 만들어 넘깁니다.
  4. 한 줄로 합치기 =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 수식 레시피

  1. 계산 열과 열 선택 =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라고 가정하고 열 번호로 접근합니다.
  2. 최근 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 내부에서 계산 대상을 최소화하고, 반복 계산은 변수에 담아 재사용합니다.

응용 패턴

  1. 보고서 구조 사전과 결합 보고서가 요구하는 열 순서를 별도 범위에 적어 두고, XMATCH로 인덱스를 찾아 CHOOSECOLS에 넘깁니다. 열 이름이 바뀌어도 사전만 고치면 됩니다.
  2. 그룹별 최근 K행 제품별로 최근 K행을 가져오려면 제품 단위로 정렬한 뒤 그룹별 순번을 만들고 그 순번이 K 이하인 행만 필터링합니다. 그 결과 배열에 CHOOSECOLS로 필요한 열만 남깁니다.
  3. 머지 없이 문장화 슬라이스 결과만으로도 월간 요약 문장을 만들 수 있습니다. 예를 들어 마지막 7일의 매출 합계를 만들어 한 문장으로 출력하면 대시보드 없이도 보고가 가능합니다.

마무리

슬라이싱은 작은 일처럼 보이지만 리포트의 체감 성능과 유지보수 난이도를 좌우합니다. CHOOSECOLS로 열을 정확히 고르고, CHOOSEROWS로 행을 상황에 맞게 자르는 습관을 들이면 복잡한 UI나 수작업 없이도 분명하고 가벼운 표를 지속적으로 생산할 수 있습니다. 위 CSV 두 개를 내려받아 본문 수식과 함께 적용해 보시기 바랍니다. 같은 구조의 여러분 데이터에도 바로 이식됩니다.