들어가기 전에
과거에는 Excel에서 반복적이고 여러 단계를 거치는 논리 연산을 처리하는 유일한 방법이 VBA였습니다. 하지만 이제는 그렇지 않습니다. REDUCE 함수는 복잡하고 정리되지 않은 데이터를 압축할 수 있도록 해줍니다. REDUCE를 사용하여 데이터 크기가 커지더라도 적응하는 정교한 데이터 엔진을 만드는 방법을 소개합니다.
[참고] REDUCE 함수는 Microsoft 365용 Excel, 웹용 Excel , 그리고 최신 Excel 모바일 및 태블릿 앱에서 사용할 수 있습니다.

이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.
- 원문: Why I ditched VBA for Excel’s REDUCE function (and why it’s better)
- URL: https://www.howtogeek.com/microsoft-excel-reduce-function-solve-impossible-data-tasks/
REDUCE 함수 기본 사용 구문
REDUCE 함수는 람다식을 사용하기 때문에 복잡해 보일 수 있지만, 실제로는 시각화해 보면 매우 직관적입니다. 구문은 다음과 같습니다.
=REDUCE(initial_value, array, LAMBDA(a,v,calculation))
작동 원리를 이해하려면 눈덩이가 산을 굴러 내려가는 것을 상상해 보세요.
- initial_value (선택 사항): 시작값. 눈덩이가 굴러가기 전의 원래 크기입니다. 이 값을 비워두면 Excel은 배열의 첫 번째 항목을 시작 값으로 사용합니다.
- array: 기울기. 함수가 통과해야 할 셀 범위입니다.
- LAMBDA(a,v,...): 이것은 스노우볼이 각 단계에서 무엇을 해야 하는지 알려주는 엔진입니다. 누적기(a)는 스노우볼 자체이며, 이전 행의 결과를 다음 행으로 전달합니다. 값(v)은 새로 쌓인 눈, 즉 함수가 현재 행에서 처리 중인 특정 항목을 나타냅니다.
계산: 이것이 논리입니다. Excel에게 눈덩이(a)에 새 눈(v)을 더하고 그 결과를 다음 단계로 전달하라고 지시하는 것입니다.
중요한 점은 REDUCE 함수에는 기억 기능이 있다는 것입니다. 각 셀을 독립적으로 살펴보는 일반적인 함수와는 달리, REDUCE 함수는 각 단계에서 무슨 일이 일어났는지 정확히 알고 있습니다.
워밍업: REDUCE 함수를 사용하여 반복적인 합계 계산하기
REDUCE 함수를 사용하여 "불가능한" 작업을 해결하는 방법을 설명하기 전에, 기본적인 수학을 통해 눈덩이처럼 불어나는 원리를 보여드리겠습니다. 다음 예제에서는 일반적으로 SUM 함수를 사용하지만, REDUCE 함수를 사용하여 숫자 목록을 더하면 누적값(a)과 최종 값(v)이 어떻게 전달되는지 쉽게 이해할 수 있습니다.
1부터 5까지의 숫자가 포함된 T_Numbers 라는 형식의 엑셀 테이블이 있다고 상상해 보세요.

이들을 합산하는 수식은 다음과 같습니다.
=REDUCE(0, T_Numbers, LAMBDA(a, v, a+v))

지금 벌어지고 있는 일은 다음과 같습니다.
| 구분 | 누산기 (a) | 값 (v) | 논리 |
| 1 | initial_value 인수 는 0입니다. | 1 | 0+1=1 |
| 2 | 1 | 2 | 1+2=3 |
| 3 | 3 | 3 | 3+3=6 |
| 4 | 6 | 4 | 6+4=10 |
| 5 | 10 | 5 | 10+5=15 |
이 함수는 리스트 작성을 완료하고 최종 결과인 15를 반환합니다.
[참고] REDUCE 함수는 반복적인 동작 때문에 일반 함수보다 Excel에 더 많은 부하를 줍니다. SUM 이나 AVERAGE처럼 속도에 최적화된 내장 함수로 작업을 수행할 수 있다면 해당 함수를 사용하는 것이 좋습니다. REDUCE 함수는 각 단계가 이전 단계에 의존하는 경우에만 사용하세요.
이 간단한 예시에서 눈덩이는 덧셈을 통해 커지는 숫자였습니다. 하지만 REDUCE의 진정한 위력은 누산기(a)에 어떤 유형의 데이터든 저장할 수 있다는 사실을 깨달았을 때 드러납니다. 다음 실제 예시에서는 누산기를 사용하여 텍스트 문자열을 삭제하거나 논리적 상태를 추적하는 방법을 소개합니다.
사례 1: 동적 다중 캐릭터 스트리퍼
엑셀 표에 코드 목록이 있는데, 이 목록에서 하이픈, 괄호, 마침표, 더하기 기호, 공백을 모두 제거하여 정리하고 싶다고 가정합니다.

이를 위해 SUBSTITUTE 함수를 서로 중첩하는 것을 고려해 볼 수 있습니다.
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE([@Code], "-", ""), "(", ""), ")", ""), ".", ""), "+", ""), " ", "")
하지만 이 수식은 읽기 어렵고, 오타가 발생하기 쉬우며, 매우 불안정합니다. 나중에 코드에서 콜론과 해시태그를 제거하기로 결정하면 중첩된 SUBSTITUTE 함수와 괄호를 더 많이 추가해야 합니다.
REDUCE 함수를 사용하면 배열 인수를 통해 제거할 문자를 지정할 수 있습니다 . 이렇게 하면 Excel에서 지정된 문자 목록을 순회하며 텍스트를 한 문자씩 제거합니다.
(1) T_Chars 라는 테이블을 만들고 제거하려는 모든 기호를 나열합니다. 여섯 번째 행에 공백이 있습니다.

(2) 기본 표에 다음 수식을 입력하고 Enter 키를 누릅니다.
=REDUCE([@Code], T_Chars[Characters], LAMBDA(a, v, SUBSTITUTE(a, v, "")))

작동 방식은 다음과 같습니다.
- 초기값( a ): 현재 행의 지저분한 코드([@Code])에서 시작합니다. 이것이 눈덩이가 처음 상태일 때의 모습입니다.
- 배열( v ): 이것은 T_Chars[문자] 열입니다. Excel은 목록에 있는 모든 기호를 하나씩 살펴봅니다.
- 반복문은 다음과 같습니다. 1단계에서 REDUCE 함수는 코드의 T_Chars[Characters] 열에서 첫 번째 문자(하이픈)를 빈 문자("")로 바꿉니다. 2단계에서는 이미 부분적으로 정리된 코드에서 다음 문자(여는 괄호)를 제거합니다. 이 함수는 T_Chars[Characters] 열의 모든 행을 처리할 때까지 이 과정을 반복합니다.
나중에 콜론과 해시태그도 제거하고 싶다면 T_Chars[Characters] 열의 맨 아래에 해당 문자를 추가하기만 하면 됩니다. 마찬가지로 괄호는 모두 유지하고 싶다면 테이블에서 해당 행을 삭제하면 됩니다.

사례 2: 다중 카테고리 검색 엔진
재고 목록을 관리하고 있는데, 설명에 "위험물(Hazardous)", "가연성(Flammable)", "파손주의(Fragile)", "부식성(Corrosive)" 또는 "독성(Toxic)"이라는 단어가 포함된 모든 품목에 플래그를 표시해야 한다고 상상해 보세요.

=OR(ISNUMBER(SEARCH("Hazardous", [@Description])), ISNUMBER(SEARCH("Flammable", [@Description])), ISNUMBER(SEARCH("Fragile", [@Description])))

이 수식에서 ISNUMBER 함수는 일종의 보호막 역할을 합니다. SEARCH 함수가 단어를 찾지 못하면 #VALUE! 오류가 발생하여 전체 수식이 중단됩니다. ISNUMBER 함수는 이 오류를 포착하여 FALSE로 변환함으로써 수식이 계속 실행될 수 있도록 합니다.
이 방법은 그대로 사용할 수 있지만, 수식이 지나치게 길고 새 키워드를 추가할 때마다 수식을 수동으로 열고 새 ISNUMBER(SEARCH()) 문자열을 추가하고 괄호의 균형을 맞춰야 합니다.
대신 REDUCE 함수를 사용하면 배열 인수에 대한 키워드 목록을 만들 수 있습니다. 따라서 Keyword 열 하나만 있는 T_Watchlist 라는 테이블을 만들고 제품 테이블에 다음 수식을 입력합니다.
=REDUCE(FALSE, T_Watchlist[Keyword], LAMBDA(a, v, a + ISNUMBER(SEARCH(v, [@Description]))>0))

- 초기값( a ): FALSE로 시작합니다. 루프가 반대되는 것을 증명할 때까지 제품은 안전한 것으로 간주됩니다.
- 배열( v ): 이것은 T_Watchlist[Keyword] 열입니다. Excel은 목록에 있는 모든 단어를 하나씩 살펴봅니다.
- 논리는 다음과 같습니다. ISNUMBER(SEARCH(v,[@Description]))는 일치하는 항목이 있으면 1(TRUE)을, 없으면 0(FALSE)을 반환합니다. 그런 다음 이 1 또는 0을 누적 변수( a )에 더합니다. 이 함수는 0보다 큰 값으로 끝나기 때문에, 루프에서 일치하는 항목을 찾고 누적 변수가 1이 되면 그 결과는 남은 기간 동안 계속 TRUE로 유지됩니다.
T_Watchlist[Keyword] 열에 새 키워드를 10개 추가하면 REDUCE 함수가 자동으로 새 행을 감지하고 추가 루프를 실행하여 플래그를 즉시 업데이트합니다. 결과적으로, 수동으로 관리해야 하는 중첩된 OR 연산자 대신 기준 변경에 따라 자동으로 수정되는 REDUCE 함수를 사용할 수 있게 됩니다.
VBA 대신 REDUCE를 사용하는 이유는 무엇일까요?
이러한 작업을 위해 VBA 매크로나 파워 쿼리를 사용하지 않는 이유가 궁금할 수 있습니다. 물론 이러한 도구들도 강력하지만, REDUCE는 다음과 같은 세 가지 장점을 제공합니다.
- 클라우드 환경 지원: VBA 매크로는 웹용 Excel이나 모바일 및 태블릿 Excel 앱에서는 작동하지 않습니다. 매크로가 포함된 통합 문서를 브라우저에서 여는 사람과 공유하면 솔루션이 제대로 작동하지 않습니다. REDUCE 함수는 장치나 플랫폼에 관계없이 모든 최신 버전의 Excel에서 작동하는 기본 함수입니다.
- 보안 문제 제로: 많은 IT 부서에서는 보안 위험 때문에 XLSM(매크로) 파일을 차단합니다 . 하지만 REDUCE는 표준 XLSX 파일 내에 저장되므로 방화벽에 의해 차단되거나 보안 경고가 발생할 염려가 없습니다.
- 즉각적인 재계산: Power Query는 대규모 데이터 세트에 탁월하지만 변경 사항을 확인하려면 수동으로 새로 고쳐야 합니다. 반면 REDUCE는 즉각적으로 반응합니다. 관심 목록에 새 키워드를 추가하거나 제품 코드의 오타를 수정하는 순간 결과가 즉시 업데이트됩니다.
줄이는 것이 항상 정답은 아닙니다
REDUCE는 매우 강력한 도구이지만 모든 상황에 적용 가능한 만능 해결책은 아닙니다. 다음 두 가지 시나리오에서는 다른 도구를 고려해야 합니다.
- 대규모 데이터 세트: REDUCE 함수는 모든 셀에 대해 계산 루프를 실행하기 때문에 특히 복잡한 루프를 실행하거나 매우 큰 데이터 세트를 다룰 경우 스프레드시트 속도가 상당히 느려질 수 있습니다. 이러한 경우에는 일반적으로 Power Query가 최선의 선택입니다.
- 복잡한 디버깅: VBA 에서는 코드를 한 줄씩 단계별로 실행할 수 있지만, REDUCE에는 이러한 특수한 단계별 디버깅 도구가 없습니다. 수식의 작은 부분을 테스트할 수는 있지만, 긴 반복문에서 오류가 발생한 정확한 행을 찾아내는 것은 훨씬 어렵습니다.
마치며
중첩된 문자열 대신 REDUCE 함수의 깔끔한 논리를 사용하면 수식을 더 간결하고 효율적으로 만들 수 있습니다. 실제로 REDUCE는 그리드 내 배열을 처리하도록 설계된 강력한 LAMBDA 함수 세 가지 중 하나입니다. MAP 함수는 마치 조립 라인과 같습니다. 범위 내 모든 셀에 동일한 논리를 적용하고 원래 크기와 동일한 새 목록을 반환하려는 경우에 사용합니다. SCAN 함수는 진행 보고서와 같습니다 . 누적 합계를 만들거나 계산 과정을 단계별로 보여주는 데 이상적입니다.
'Excel' 카테고리의 다른 글
| iPad용 Excel 빠른 시작 가이드: 설정, 팁, 위젯 및 단축키 (0) | 2026.05.21 |
|---|---|
| 엑셀 전문가들은 싫어하지만, 그래도 개인적으로 좋아하는 "비밀 병기" (0) | 2026.05.20 |
| 엑셀의 MAP 함수가 빛을 발하는 실제 사례 5가지 (0) | 2026.05.12 |
| Excel의 LAMBDA, SCAN 함수의 차이점은 무엇이며, 함께 사용하는 법 (0) | 2026.05.11 |
| 긴 Excel 수식보다 보조 열이 더 나은 이유 (1) | 2026.05.08 |