# 엑셀 수식 리팩토링 기법 6가지

URL: https://formula.dog/ko/journal/excel-susik-refactoring
Type: blog
Locale: ko
Published: 2026-06-29
Updated: 2026-07-04

---

> 지저분한 수식은 속도를 늦추고 실수로 이어집니다. 엑셀 수식 리팩토링 기법 6가지를 예시와 함께 정리했습니다.

엑셀 수식 리팩토링은 이미 잘 작동하는 수식의 겉모습만 정리하는 작업입니다. 결과값은 그대로 두고, 마감 11시에 급하게 짜맞춘 것처럼 보이는 수식을 다음 분기에도 다시 열어보고 싶은 모습으로 바꾸는 일이죠.

비스킷이 이미 그 수식을 찾아왔어요. 진짜 효과가 있는 방법만 정리했습니다.

## 수식은 멀쩡한데 왜 자꾸 찜찜할까요?

여섯 달 전에 만든 파일을 열었는데, 셀 하나가 무슨 뜻인지 이해하는 데 3분이 걸린 적 있나요? 아니면 수식을 새 열에 복사했는데 어딘가에 숨어있던 고정 행 참조 때문에 조용히 깨진 적은요? 리팩토링이 필요하다는 가장 흔한 신호입니다.

리팩토링은 결과를 바꾸지 않습니다. 구조를 바꿔서, 행이 늘어나거나 열이 추가되거나 시트 이름이 바뀌어도 결과가 계속 정확하게 나오도록 만드는 작업이에요.

건너뛰어도 되는 경우: 한 번 쓰고 아무도 다시 안 열 계산 파일. 리팩토링에는 시간과 수고라는 비용이 들고, 얻는 게 없다면 투자 대비 효과도 없습니다.

할 가치가 있는 경우: 여러 사람이 같이 쓰는 파일, 자주 업데이트하는 파일, 여러 시트에 걸쳐 수식이 줄줄이 이어지는 파일.

주의해야 할 신호들:

- 
100% 확대해도 열 너비보다 긴 수식

- 
중첩 IF가 두 단계를 넘어가는 경우

- 
하드코딩된 숫자가 세 군데 넘게 나오는 경우

- 
동료가 셀을 직접 읽는 대신 무슨 뜻인지 물어보는 경우

이 중 하나만 해당해도 리팩토링 일정을 잡을 때입니다.

![색상으로 정리된 깔끔한 스프레드시트가 보이는 노트북 화면 클로즈업](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-06/2cc0d7-inline1.webp)

## 함수 추출: 수식 하나를 여러 조각으로 나누기

코드에서도 스프레드시트에서도 가장 쓸모 있는 리팩토링 기법입니다. 원리는 간단해요. 수식 하나가 세 가지 일을 한다면, 세 개의 셀로 나눠서 단계별로 처리하고 마지막에 결과만 합치는 겁니다.

**전 (한 셀이 모든 걸 처리):**

`=IF(AND(A2<>"",DATEDIF(A2,TODAY(),"Y")>30),"시니어","주니어")`**후:**

- 
셀 `C2`: `=DATEDIF(A2,TODAY(),"Y")`, 이름은 "근속 연수"

- 
셀 `D2`: `=AND(A2<>"",C2>30)`, 이름은 "시니어 여부"

- 
셀 `E2`: `=IF(D2,"시니어","주니어")`, 최종 결과

실제 셀에서는 이렇게 나옵니다. 단계마다 그 자체로 읽힙니다. 기준값이 30에서 25로 바뀌면 셀 하나의 숫자만 고치면 되고, DATEDIF가 날짜 누락으로 깨지면 어디서 문제인지 바로 보입니다.

단점은 열을 더 많이 씁니다. 넓은 표에서는 아까울 수 있어요. 열 공간이 빠듯하면 별도 시트에 헬퍼 영역을 만드세요. 시트 이름을 "Helpers"나 "계산용"처럼 지어두면 파일을 여는 누구나 바로 이해합니다.

헬퍼 셀 사용에는 엑셀과 시트 사이에 버전 제한이 없습니다.

## 임시 저장 대신 바로 계산하기

스프레드시트에서 임시 변수란, 다른 어디서도 직접 참조하지 않고 다음 단계로 넘어가려고 채워 넣은 중간값 셀을 말합니다.

이런 셀이 유용할 때도 있어요 (위 사례처럼). 하지만 헬퍼 셀 다섯 개가 줄줄이 이어지는데 마지막 하나만 중요하고 중간 값들은 절대 안 바뀐다면, 하나의 수식으로 합쳐도 됩니다.

**결과 하나로 이어지는 헬퍼 셀 세 개:**

- 
`=B2*C2`, 소계

- 
`=D2*0.2`, 세액

- 
`=D2+E2`, 합계

**합친 버전:**

`=(B2*C2)+(B2*C2*0.2)`세율을 이름 붙인 범위로 쓰면:

`=B2*C2*(1+TaxRate)`기준은 이렇습니다. 헬퍼 셀이 딱 하나의 셀에서만 쓰인다면, 그 수식이 인라인으로 넣기에 충분히 짧은지 물어보세요. 짧으면 합치고, 아니면 헬퍼 셀을 남기고 이름을 제대로 붙이세요.

경계선은 대략 80자입니다. 그보다 긴 수식은 보통 인라인으로 넣기엔 너무 깁니다. 그럴 땐 위의 함수 추출 방식이 낫습니다. 가독성에 진짜 도움이 될 때만 헬퍼를 남기고, 그냥 잡음이라면 지우세요.

## 캡슐화: 바뀌면 안 되는 값은 한 곳에 모아두기

스프레드시트에서 캡슐화란, 세율이나 기준값, 참조값처럼 고정된 입력값을 수식 여기저기 하드코딩하는 대신 한 곳에 모아두는 것을 말합니다.

모두가 잊어버리지만 모두가 찾는 그 수식이 바로 이겁니다.

부가세율 `0.2`가 워크북 안 47개 수식에 하드코딩되어 있다면 유지보수 지뢰나 다름없습니다. 세율이 바뀌면 47곳을 다 찾아야 하고, 세 곳이라도 놓치면 계산 오류가 생깁니다.

**해결법:**

- 
`Settings` 시트를 만들고 `VATRate = 0.2`라는 이름의 셀을 정의하세요

- 
모든 수식에서 이걸 참조하세요: `=B2*VATRate`

- 
세율이 바뀌면 셀 하나만 고치면 나머지는 저절로 따라옵니다

날짜 기준값(오늘 날짜를 고정 기준으로), 환율, 구간 기준값에도 똑같이 적용됩니다. 어떤 값이 두 번 넘게 나오고 언젠가 바뀔 수 있다면, 이름 붙인 참조로 만들어야 합니다.

**이름 붙은 범위 만드는 법:**

- 
엑셀: 수식 탭 > 이름 관리자 > 새로 만들기

- 
구글 시트: 데이터 > 이름이 지정된 범위

이름 짓는 방식이 중요합니다. `TaxRate`는 명확하죠. `TR`은 아닙니다. `tmp_3`도 아닙니다. 그 수식을 만들지 않은 사람도 3초 안에 이해할 수 있는 이름을 쓰세요.

![인쇄된 스프레드시트를 펜을 들고 검토하는 전문 분석가](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-06/c48a77-inline2.webp)

## 중복 제거: 수식에도 DRY 원칙을

[DRY, 반복하지 말라는 원칙](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)은 소프트웨어 공학에서 가장 많이 언급되는 원칙 중 하나이고, 스프레드시트에도 그대로 적용됩니다. 같은 VLOOKUP을 15개 열에 조금씩만 바꿔서 복사해뒀다면, 언젠가 터질 유지보수 문제를 안고 있는 셈입니다.

상황에 따라 두 가지 방법이 있습니다.

**엑셀 365 / 구글 시트:** XLOOKUP이나 배열 확장을 지원하는 INDEX-MATCH로 여러 열을 한 번에 가져오세요.

`=XLOOKUP(A2,LookupTable[ID],LookupTable[[Name]:[Status]])`이러면 이름과 상태를 한 번에 가져오고, 여러 열에 복사-붙여넣기 할 필요가 없습니다.

**구버전 엑셀(2016 이하):** 헬퍼 셀에 MATCH 하나만 만들고, 그 위치를 참조하는 INDEX를 쓰세요.

- 
`G2`: `=MATCH(A2,LookupTable[ID],0)`, 모든 열이 쓰는 MATCH 하나

- 
`H2`: `=INDEX(LookupTable[Name],G2)`

- 
`I2`: `=INDEX(LookupTable[Status],G2)`

같은 MATCH 결과를 어디서나 참조합니다. 조회 열이 바뀌면 수식 하나만 고치면 됩니다.

버전 참고: XLOOKUP은 엔터프라이즈 구독자용 엑셀 2019와 엑셀 365에 등장했습니다. 팀이 엑셀 2016을 쓴다면 INDEX-MATCH 방식을 쓰세요. 구글 시트는 2022년부터 모든 요금제에서 XLOOKUP을 지원합니다.

## 중첩 IF 대신 깔끔한 대안 쓰기

중첩 IF는 스프레드시트가 읽을 수 없게 되는 지점입니다. 세 단계만 넘어가도 대부분의 독자, 심지어 여섯 달 후의 자기 자신도 놓칩니다.

**전 (중첩 IF 체인):**

`=IF(A2>10000,"A",IF(A2>5000,"B",IF(A2>1000,"C","D")))`**방법 1: IFS (엑셀 2016+ / 시트)**

`=IFS(A2>10000,"A",A2>5000,"B",A2>1000,"C",TRUE,"D")`더 납작해지긴 했지만 여전히 조건 네 개가 한 수식에 있습니다. 그래도 쓸 만합니다.

**방법 2: 조회 표를 쓴 VLOOKUP (저평가된 방법)**

작은 참조 표를 만드세요.

- 
10001 이상: 카테고리 A

- 
5001~10000: 카테고리 B

- 
1001~5000: 카테고리 C

- 
0~1000: 카테고리 D

그다음: `=VLOOKUP(A2,ThresholdTable,2,TRUE)`

TRUE(근사 일치)는 정렬된 표를 따라 내려가며 맞는 마지막 카테고리를 돌려줍니다. 로직이 이제 표 안에 있지 수식 속에 숨어있지 않습니다. 기준값이 바뀌면 표에서 행 하나만 고치면 됩니다.

투자할 가치: 조회 표 방식은 수식을 못 읽는 사람도 로직을 눈으로 확인하고 검증할 수 있게 해줍니다.

급할 땐 건너뛰어도 되는 것: 조건이 세 개 이하면 IFS로 충분합니다.

SWITCH 함수도 엑셀 2019+와 시트에서 쓸 수 있는 또 다른 선택지로, 범위가 아니라 정확한 값을 매칭할 때 유용합니다. 정확히 일치하는 경우라면 IFS보다 더 깔끔하게 읽힙니다.

## 고치기보다 다시 쓰는 게 나을 때

가끔은 수식이 틀린 게 아니라 접근 방식 자체가 잘못된 경우도 있습니다. CONCATENATE와 `&`로 텍스트를 이어붙인 200자짜리 수식을 물려받았고, 필드 하나를 더 추가해야 한다면요. 정답은 늘리는 게 아니라 TEXTJOIN으로 다시 쓰는 겁니다.

**전:**

`=A2&" | "&B2&" | "&C2&" | "&D2`**후:**

`=TEXTJOIN(" | ",TRUE,A2:D2)`내일 표의 모습이 바뀌어도 이 수식은 따라갑니다. TEXTJOIN은 빈 셀도 처리하고 배열도 처리하며, 열 E를 추가해도 깨지지 않습니다.

같은 논리가 적용되는 경우:

- 
정확 일치와 누락값 처리가 필요할 때 VLOOKUP을 XLOOKUP으로 바꾸기

- 
IFERROR로 감싸던 걸 최신 함수의 네이티브 오류 처리로 바꾸기

- 
Ctrl+Shift+Enter로 입력하던 배열 수식을 엑셀 365의 네이티브 동적 배열로 바꾸기

같은 원칙이 더 큰 규모에도 적용됩니다. INDIRECT 참조와 외부 연결, 서로를 가리키는 이름 붙은 범위들이 뒤엉킨 거대한 데이터 파이프라인을 스프레드시트 안에서 관리하고 있다면, 로직을 SQL이나 파이썬, Power Query 같은 제대로 된 도구로 빼내고 스프레드시트는 화면 표시용으로만 쓰는 게 맞는 리팩토링일 수도 있습니다. 더 큰 결정이지만 같은 범주에 속합니다.

![코드 리뷰 중 화이트보드에서 플로우 다이어그램을 보며 협업하는 두 동료](https://fdzlnqpwsaniezitwiuw.supabase.co/storage/v1/object/public/cms-media/formula-dog/2026-06/c94a4d-inline3.webp)

## 리팩토링 시작 전 준비해야 할 세 가지

엑셀 수식 리팩토링은 복구할 수 없는 걸 망가뜨리지 않을 때만 의미가 있습니다. 스프레드시트에서는 이런 뜻이에요.

- 
**백업 사본.** 리팩토링을 시작하기 전에 날짜 붙인 워크북 사본을 저장하세요. 같은 폴더에 다른 이름으로 저장하는 게 아니라, 완전히 다른 곳(클라우드 백업, 나에게 메일 보내기, 뭐든)에요. 뭔가 잘못됐을 때 그 한 번을 위해 고마워하게 됩니다.

- 
**지금 결과가 뭐였는지 알아두기.** 뭔가 바꾸기 전에 핵심 결과값들, 합계, 요약 수치, 주요 셀 값을 적어두세요. 각 변경 후 같은 셀과 비교하세요. 10초짜리 확인이 회귀 버그를 바로 잡아줍니다.

- 
**한 번에 하나씩.** 같은 세션에서 함수 추출도 하고, 이름 붙인 범위 세 개도 캡슐화하고, 중첩 IF도 납작하게 만들지 마세요. 뭔가 깨지면 어떤 변경 때문인지 알아야 합니다. 하나만 하고, 확인하고, 다음으로 넘어가세요.

이 세 단계는 준비하는 데 5분쯤 걸립니다. 예상치 못한 일이 생긴 모든 리팩토링 세션에서 그 5분보다 훨씬 많은 시간을 아껴줬습니다.

## 리팩토링이 끝나지 않을 때, 멈추는 법

리팩토링의 위험은 완벽주의입니다. 이미 잘 작동하던 워크북을 하루 종일 재정리하다가, 반나절을 써서 겨우 조금 더 깔끔한 결과만 얻을 수도 있어요.

시작 전에 시간 제한을 두세요. 이번엔 45분. 실제로 문제를 일으키는 수식, 사람들이 잘못 읽는 수식, 정상적으로 쓰는데도 깨지는 수식, 추가하려는 새 기능을 막고 있는 수식부터 우선순위를 매기세요.

나머지는 그냥 두세요. 잘 작동하고, 아무도 안 건드리고, 1년 동안 오류 한 번 없었던 수식이라면 그걸로 충분합니다. 충분히 좋은 상태도 정당한 멈춤 지점입니다.

도움이 되는 기준: 리팩토링은 워크북을 완벽하게 만드는 게 아니라 다음 변경을 더 쉽게 만드는 겁니다. 바꾸기 전에 스스로 물어보세요. 이게 다음에 해야 할 일을 더 빠르거나 안전하게 만들어주나요? 그렇다면 하세요. 아니라면 멈추세요.

제대로 된 리팩토링은 티가 안 납니다. 아무도 눈치채지 못하죠. 그게 목표입니다.

## FAQ

### 스프레드시트에서 코드 리팩토링이란 무엇인가요?

스프레드시트에서 코드 리팩토링은 계산 결과를 바꾸지 않고 수식과 워크북 구조를 다시 정리하는 작업을 말합니다. 목표는 최종 결과는 그대로 둔 채 수식을 더 읽기 쉽고, 고치기 쉽고, 재사용하기 쉽게 만드는 것입니다.

### 엑셀이나 구글 시트 수식은 언제 리팩토링해야 하나요?

다시 읽었을 때 이해하기 어렵거나, 변경했을 때 예상치 못하게 깨지거나, 기존 파일에 새 기능을 추가하기 전이라면 리팩토링할 때입니다. 잘 작동하고 거의 손대지 않는 파일은 굳이 리팩토링하지 마세요.

### 스프레드시트에서 함수 추출 기법이란 무엇인가요?

함수 추출은 복잡한 수식 하나를 여러 헬퍼 셀에 나눠서 각 단계가 한 가지 일만 하도록 만드는 방법입니다. 이렇게 하면 각 단계를 따로 읽고 검증할 수 있습니다.

### 엑셀에서 중복된 수식은 어떻게 없애나요?

엑셀 365나 구글 시트라면 여러 열을 한 번에 가져오는 XLOOKUP을 쓰고, 구버전이라면 헬퍼 셀에 MATCH 하나만 만들어 모든 INDEX 수식이 그걸 참조하게 하세요. 그러면 여러 개가 아니라 조회 로직 하나만 관리하면 됩니다.

### Replace Conditional 기법이란 무엇인가요?

Replace Conditional은 중첩 IF 체인을 더 깔끔한 대안으로 바꾸는 방법입니다. 가독성을 위한 IFS 함수, 또는 로직을 수식 밖 참조 표로 옮기는 VLOOKUP 근사 일치 방식이 있습니다.

### 리팩토링하면 수식이 반환하는 값이 바뀌나요?

아니요. 리팩토링의 핵심 원칙은 겉으로 드러나는 동작이 그대로 유지되는 것입니다. 구조만 바꾸고 결과는 바꾸지 않습니다. 만약 리팩토링 후 결과값이 달라졌다면 뭔가 잘못된 것입니다.

### 엑셀에서 이름 붙은 범위는 코드 리팩토링에 어떻게 도움이 되나요?

이름 붙은 범위를 쓰면 세율, 날짜 기준값, 조회 표처럼 고정된 값에 의미 있는 이름을 붙이고 하드코딩 대신 이름으로 참조할 수 있습니다. 값이 바뀌면 한 곳만 고치면 모든 수식이 자동으로 따라옵니다.