# Google Sheets 함수 마스터하기 (6/10): ARRAYFORMULA - 하나의 수식으로 전체 열 처리 ## 이전 편 복습 5편에서는 차세대 조회 함수 XLOOKUP을 배웠습니다. 오늘은 Google Sheets의 강력한 기능인 **ARRAYFORMULA**를 알아봅니다. 수백 개의 수식을 단 하나로 대체할 수 있습니다! --- ## ARRAYFORMULA란? ARRAYFORMULA는 하나의 수식을 배열(여러 셀)에 동시에 적용하는 함수입니다. 일반적으로 각 셀에 수식을 복사해야 하지만, ARRAYFORMULA를 사용하면 단 하나의 수식으로 전체 열을 처리할 수 있습니다. ### 기본 문법 ``` =ARRAYFORMULA(배열_수식) ``` --- ## 기본 예제 ### 일반 수식 vs ARRAYFORMULA #### 예제 데이터 (A1:B5) | 수량 | 단가 | |------|------| | 10 | 1000 | | 20 | 1500 | | 15 | 2000 | | 25 | 800 | #### 일반 방식: 각 셀에 수식 입력 ``` C2: =A2*B2 C3: =A3*B3 C4: =A4*B4 C5: =A5*B5 ``` **문제점**: - 수식을 여러 번 복사 - 새 행 추가 시 수식 복사 필요 - 파일 크기 증가 #### ARRAYFORMULA 방식: C2에 하나의 수식 ``` =ARRAYFORMULA(A2:A*B2:B) ``` **결과**: C2부터 아래로 모든 계산 결과가 자동 표시! --- ## ARRAYFORMULA 실전 예제 ### 예제 1: 합계 계산 #### 데이터 (A1:C5) | 제품명 | 정가 | 할인율 | |--------|------|--------| | 노트북 | 1500000 | 10% | | 마우스 | 35000 | 5% | | 키보드 | 89000 | 15% | | 모니터 | 450000 | 20% | #### 할인가 계산 (D2에 입력) ``` =ARRAYFORMULA(B2:B*(1-C2:C)) ``` **결과**: - 1350000 (노트북) - 33250 (마우스) - 75650 (키보드) - 360000 (모니터) --- ### 예제 2: 문자열 결합 #### 이름 합치기 | 성 | 이름 | |----|------| | 김 | 철수 | | 이 | 영희 | | 박 | 민수 | ``` =ARRAYFORMULA(A2:A&B2:B) ``` **결과**: 김철수, 이영희, 박민수 #### 공백 포함 ``` =ARRAYFORMULA(A2:A&" "&B2:B) ``` **결과**: 김 철수, 이 영희, 박 민수 --- ### 예제 3: 조건부 계산 #### IF와 함께 사용 | 점수 | |------| | 85 | | 60 | | 92 | | 45 | ``` =ARRAYFORMULA(IF(A2:A>=70, "합격", "불합격")) ``` **결과**: 합격, 불합격, 합격, 불합격 --- ## 빈 셀 처리 (중요!) ARRAYFORMULA는 데이터가 없는 셀도 처리하려고 합니다. 이를 방지하려면: ### 방법 1: IF로 빈 셀 체크 ``` =ARRAYFORMULA(IF(A2:A="", "", A2:A*B2:B)) ``` A열이 비어있으면 빈 값, 아니면 계산 ### 방법 2: LEN으로 체크 ``` =ARRAYFORMULA(IF(LEN(A2:A)=0, "", A2:A*B2:B)) ``` ### 방법 3: ISBLANK 사용 ``` =ARRAYFORMULA(IF(ISBLANK(A2:A), "", A2:A*B2:B)) ``` --- ## 다른 함수와 조합 ### ARRAYFORMULA + VLOOKUP #### 주문 데이터 (A1:B5) | 주문번호 | 제품코드 | |----------|----------| | 1001 | P001 | | 1002 | P003 | | 1003 | P002 | | 1004 | P001 | #### 제품 테이블 (E1:F4) | 제품코드 | 제품명 | |----------|--------| | P001 | 노트북 | | P002 | 마우스 | | P003 | 키보드 | #### 제품명 일괄 조회 (C2에 입력) ``` =ARRAYFORMULA(IF(B2:B="", "", VLOOKUP(B2:B, $E$2:$F$4, 2, FALSE))) ``` **결과**: 노트북, 키보드, 마우스, 노트북 --- ### ARRAYFORMULA + INDEX-MATCH 더 유연한 조회: ``` =ARRAYFORMULA(IF(B2:B="", "", INDEX($F$2:$F$4, MATCH(B2:B, $E$2:$E$4, 0)))) ``` --- ### ARRAYFORMULA + TEXT #### 날짜 서식 변환 | 날짜 | |------| | 2024-01-15 | | 2024-02-20 | | 2024-03-25 | ``` =ARRAYFORMULA(TEXT(A2:A, "YYYY년 MM월 DD일")) ``` **결과**: 2024년 01월 15일, 2024년 02월 20일, 2024년 03월 25일 --- ## 자동 행 번호 생성 ### ROW 함수 활용 ``` =ARRAYFORMULA(ROW(A2:A)-ROW(A2)+1) ``` **결과**: 1, 2, 3, 4, 5... ### 조건부 행 번호 데이터가 있는 행만 번호 부여: ``` =ARRAYFORMULA(IF(A2:A="", "", ROW(A2:A)-ROW(A2)+1)) ``` --- ## 누적 합계 계산 ### 매출 누적 합계 | 월 | 매출 | |----|------| | 1월 | 1000 | | 2월 | 1500 | | 3월 | 1200 | ``` =ARRAYFORMULA(IF(A2:A="", "", SUMIF(ROW(A$2:A2), "<="&ROW(A2:A), B$2:B))) ``` 또는 SCAN 함수 사용 (더 깔끔): ``` =SCAN(0, B2:B4, LAMBDA(acc, val, acc+val)) ``` **결과**: 1000, 2500, 3700 --- ## 조건부 카운트 ### COUNTIF와 함께 각 카테고리별 등장 횟수: ``` =ARRAYFORMULA(IF(A2:A="", "", COUNTIF(A$2:A2, A2:A))) ``` 이 수식은 해당 값이 몇 번째로 등장하는지 표시합니다. --- ## ARRAYFORMULA 성능 최적화 ### 1. 범위 제한 ``` // 느림 - 전체 열 참조 =ARRAYFORMULA(A:A*B:B) // 빠름 - 필요한 범위만 =ARRAYFORMULA(A2:A1000*B2:B1000) ``` ### 2. 불필요한 계산 방지 ``` =ARRAYFORMULA(IF(A2:A1000="", "", 복잡한계산)) ``` 빈 셀은 계산하지 않음 ### 3. 단순한 수식 우선 복잡한 ARRAYFORMULA보다 간단한 여러 개의 열이 나을 수 있음 --- ## 주의사항 ### 1. 기존 데이터 덮어쓰기 ARRAYFORMULA는 아래 셀에 데이터를 출력합니다. 기존 데이터가 있으면 에러! ### 2. 순환 참조 주의 ``` // 잘못됨 - 순환 참조 =ARRAYFORMULA(A:A+1) // A열을 참조하면서 A열에 결과 출력 ``` ### 3. 중첩 제한 너무 복잡한 중첩은 성능 저하 및 오류 발생 --- ## ARRAYFORMULA를 지원하지 않는 함수 일부 함수는 ARRAYFORMULA와 함께 사용할 수 없습니다: - INDIRECT - OFFSET - IMPORTRANGE - 일부 집계 함수 이 경우 대안 함수를 찾거나 일반 수식 복사 방식 사용 --- ## 실무 활용 템플릿 ### 템플릿 1: 완전 자동 주문서 | 주문번호 | 제품 | 수량 | 단가 | 금액 | |----------|------|------|------|------| E2에 입력: ``` =ARRAYFORMULA(IF(A2:A="", "", C2:C*D2:D)) ``` 수량과 단가를 입력하면 금액 자동 계산! --- ### 템플릿 2: 자동 등급 부여 | 이름 | 점수 | 등급 | |------|------|------| C2에 입력: ``` =ARRAYFORMULA(IF(A2:A="", "", IF(B2:B>=90, "A", IF(B2:B>=80, "B", IF(B2:B>=70, "C", IF(B2:B>=60, "D", "F")))))) ``` --- ### 템플릿 3: 연락처 형식 통일 | 전화번호 | 표준형식 | |----------|----------| | 01012345678 | | | 010-1234-5678 | | B2에 입력: ``` =ARRAYFORMULA(IF(A2:A="", "", REGEXREPLACE(A2:A, "(\d{3})[-]?(\d{4})[-]?(\d{4})", "$1-$2-$3"))) ``` **결과**: 모든 전화번호가 010-1234-5678 형식으로 통일 --- ## 정리 | 상황 | 수식 예시 | |------|----------| | 기본 계산 | `=ARRAYFORMULA(A:A*B:B)` | | 빈 셀 제외 | `=ARRAYFORMULA(IF(A:A="", "", 계산))` | | 문자열 결합 | `=ARRAYFORMULA(A:A&" "&B:B)` | | 조건부 값 | `=ARRAYFORMULA(IF(조건, 참, 거짓))` | | VLOOKUP 조합 | `=ARRAYFORMULA(VLOOKUP(키열, 범위, 열번호, FALSE))` | | 자동 번호 | `=ARRAYFORMULA(ROW(A2:A)-1)` | --- ## 핵심 포인트 1. **하나의 수식으로 전체 열 처리** - 수식 복사 불필요 2. **새 데이터 자동 반영** - 유지보수 최소화 3. **파일 크기 감소** - 수식이 한 개뿐 4. **빈 셀 처리 필수** - IF 조건 추가 5. **성능 고려** - 범위 제한 권장 --- ## 다음 편 예고 **[7편: QUERY 함수]**에서는 Google Sheets에서 SQL처럼 데이터를 조회하는 강력한 QUERY 함수를 배웁니다. 필터, 정렬, 그룹화를 하나의 수식으로! --- *이 글이 도움이 되셨다면 시리즈의 다른 글도 확인해 보세요!*