- 최초 작성일: 2026-07-25
- 최종 수정일: 2026-07-25
- 조회수: 289 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: LAMBDA와 환상 조합, 엑셀 신규 함수 4가지 (BYCOL·BYROW·SCAN·REDUCE)
들어가기 전에
엑셀에 LAMBDA 함수가 처음 도입되었을 때 '또 하나의 신기능이 추가됐구나' 정도로만 여기고 크게 관심을 두지 않았던 분들이 많습니다(저 또한 마찬가지였습니다). 하지만 제대로 쓰면 쓸수록 생각이 달라집니다. LAMBDA 자체도 강력하지만, 진짜 위력은 LAMBDA와 함께 쓸 수 있게 설계된 '도우미 함수'들을 조합했을 때 드러납니다. 이들 함수들을 활용하면 여러 단계를 거치는 번거로운 수식이나, 복잡한 VBA 코드를 작성하지 않고도 원하는 결과를 얻을 수 있습니다.
엑셀에는 LAMBDA와 함께 쓰도록 만들어진 도우미 함수가 여러 개 있습니다. 여기서는 그중에서도 실무에서 자주 쓰이는 네 가지, 즉 BYCOL, BYROW, SCAN, REDUCE 함수에 대해 살펴보겠습니다.
LAMBDA 함수를 한 번도 사용해본 적이 없다면 이 도우미 함수들의 이름부터 낯설고 어렵게 느껴질 수 있습니다. 하지만 이 함수들을 쓰기 위해 LAMBDA의 원리를 깊이 파고들 필요는 없습니다. 뒤에서 살펴보겠지만, SUM이나 CONCAT처럼 이미 알고 있는 함수를 그대로 넣어 쓸 수 있는 경우도 많기 때문입니다.
다만 한 가지만 확인하세요. 이 글에서 다루는 함수들은 Excel 365 또는 Excel 2024 버전부터 지원되며, Excel 2021 이하 버전에서는 사용할 수 없습니다. 버전을 확인한 뒤 다음 내용을 따라오시기 바랍니다.
이 글에서 다루는 핵심 내용
- 열 단위로 한 번에 계산하는 BYCOL 함수 활용법
- 행 단위로 한 번에 계산하는 BYROW 함수 활용법
- 중간 결과를 모두 보여주는 누적 계산, SCAN 함수
- 최종 결과 하나만 남기는 누적 계산, REDUCE 함수
- BYCOL과 FILTER를 결합해 조건에 맞는 열만 추출하는 방법
- REDUCE와 TEXTAFTER를 조합해 태그 문자열을 깔끔하게 만드는 방법
LAMBDA와 환상 조합, 엑셀 신규 함수 4가지 (BYCOL·BYROW·SCAN·REDUCE)
수식을 복사하는 대신 배열 하나로 끝낸다
여러 개의 셀에 같은 형태의 수식을 반복해서 채워 넣는 작업은 엑셀 사용자라면 누구나 겪게 되는 일입니다. 예를 들어 열은 제품, 행은 월, 각 셀은 해당 월의 판매 실적을 나타내는 큰 표를 다룬다고 가정해 보겠습니다. 제품별 총 판매 실적을 구하려면, 제품 A의 실적이 B2:B6 범위에 있을 때 가장 먼저 다음과 같은 수식을 B7 셀에 입력하게 됩니다.
=SUM(B2:B6)
제품이 20개라면 이런 수식을 20번 따로 작성해야 합니다. 물론 수식을 인접한 셀로 복사하기만 하면 되므로 까다롭거나 시간이 많이 걸리는 작업은 아닙니다. 하지만 이런 방식에는 분명한 단점이 있습니다. 표가 커질수록 스프레드시트 구조가 복잡해지고, 나중에 수식을 일괄로 수정해야 할 때 하나하나 손을 봐야 하며, 그 과정에서 특정 셀을 빠뜨리는 실수가 생기기도 쉽습니다. 바로 이런 반복 작업을 단 하나의 수식으로 줄여주는 것이 지금부터 소개할 네 가지 함수입니다.
1. BYCOL — 열 단위로 한 번에 계산하기
BYCOL 함수는 배열이나 범위의 각 '열'에 사용자가 지정한 함수(LAMBDA)를 하나씩 적용한 다음, 그 결과를 열의 개수만큼 가로로 나열된 배열로 돌려줍니다. 즉, 앞에서 20번 반복해야 했던 SUM 수식을 단 한 줄로 대체할 수 있는 함수라고 보면 됩니다.
BYCOL 함수 기본 구문
=BYCOL(array, lambda)
앞의 제품 예시를 그대로 이어가 보겠습니다. 제품이 5개이고, 이들의 매출 수치가 B4:F9 범위에 들어 있다고 가정하면 다음 수식만으로 각 열의 합계를 한 번에 구할 수 있습니다.
=BYCOL(B4:F9, LAMBDA(myCol, SUM(myCol)))
이 수식에서 myCol은 LAMBDA 안에서 직접 정의한 매개변수 이름입니다. BYCOL은 B4:F9 범위를 통째로 넘기는 것처럼 보이지만, 실제로는 내부적으로 한 번에 한 열씩 myCol에 전달합니다. 그렇게 전달된 값을 SUM 함수가 받아서 합계를 구하고, BYCOL은 이 과정을 열의 개수만큼 반복한 뒤 결과를 가로 배열로 정리해 반환합니다.
LAMBDA라는 개념이 아직 낯설게 느껴진다면 꼭 LAMBDA를 사용하지 않아도 된다는 점을 기억해 두면 좋습니다. 우리에게 친숙한 SUM 같은 함수를 그대로 인수 자리에 넣어서 쓸 수 있습니다. 다만 단순 합계가 아니라 좀 더 복잡한 계산이 필요하다면, 그때는 LAMBDA로 원하는 로직을 직접 정의해서 사용하면 됩니다.
=BYCOL(B4:F9, SUM)
대개의 엑셀 함수가 그러하듯, BYCOL도 다른 함수와 함께 쓸 때 진가를 발휘합니다. 제품 이름이 B3:F3 헤더 행에 들어 있다고 가정할 때, FILTER 함수와 결합한 다음 수식은 총 매출이 2천만 원(20000000)을 초과하는 제품의 이름만 골라서 보여줍니다.
=FILTER(B3:F3,BYCOL(B4:F9,LAMBDA(myCol,SUM(myCol)))>20000000,"해당 값 없음")
이렇게 하면 어떤 제품의 합계가 조건을 만족하는지 눈으로 일일이 확인할 필요 없이, 조건에 맞는 제품명만 즉시 뽑아낼 수 있습니다.
2. BYROW — 행 단위로 한 번에 계산하기
BYROW 함수는 BYCOL과 짝을 이루는 함수로, 배열이나 범위의 각 '행'에 LAMBDA를 하나씩 적용한 뒤 그 결과를 세로 방향 배열로 반환합니다. 열이 아니라 행 단위로 데이터를 요약해야 할 때, 특히 행 수가 많은 긴 표를 다룰 때 유용합니다.
BYROW 함수 기본 구문
=BYROW(array, lambda)
앞서 사용한 예시를 그대로 가져와 보면, 다음 수식 하나로 B4:F9 범위의 각 행을 합산할 수 있습니다.
=BYROW(B4:F9, LAMBDA(myRow, SUM(myRow)))
BYCOL과 마찬가지로, 계산 로직이 단순 합계라면 LAMBDA 없이 SUM 함수만 바로 넣어서 써도 무방합니다.
=BYROW(B4:F9, SUM)
예를 들어, 판매 데이터가 제품이 아니라 '월'을 기준으로 행에 배열되어 있는 표라면, BYROW를 이용해 월별 합계를 한 번에 구하고, 이 결과를 다시 다른 함수와 연결해 특정 조건을 만족하는 달만 골라내는 식으로 응용할 수도 있습니다.
3. SCAN — 중간 결과를 모두 보여주는 누적 계산
SCAN 함수는 '누적 합계', 즉 값을 하나씩 더해 나가면서 각 단계마다 지금까지 누적된 결과를 함께 확인하고 싶을 때 적합한 함수입니다. 매출을 예로 들면, 하루하루의 매출액이 아니라 특정 시점까지 누적된 매출액이 얼마인지를 한눈에 보여주는 식입니다.
SCAN 함수 기본 구문
=SCAN(start_value, array, lambda)
SCAN은 시작 값(start_value), 계산 대상이 되는 배열이나 범위, 그리고 LAMBDA 함수까지 세 개의 인수를 받습니다. 지정한 시작 값에서 출발해, 배열을 하나씩 처리해 나가면서 그때그때의 중간 결과를 모두 배열 형태로 반환하는 것이 특징입니다.
앞서 사용한 예시에서 노트북의 누적 합계를 구한다면 수식은 다음과 같습니다.
=SCAN(0, B4:B9, LAMBDA(a, v, a + v))
처음 보면 다소 복잡해 보이지만, 하나씩 뜯어보면 그리 어렵지 않습니다.
- start_value (0): 누적 계산을 0부터 시작한다는 뜻입니다.
- array (B4:B9): 누적해서 더할 값들이 들어 있는 범위입니다.
- a: LAMBDA 안에서 지금까지 누적된 실행 결과를 담아 두는 매개변수입니다.
- v: 배열에서 현재 처리 중인 값을 나타내는 매개변수입니다.
즉, B4 값을 0에 더한 결과가 첫 번째 결과가 되고, 그 결과에 B5 값을 더한 것이 두 번째 결과가 되는 식으로 마지막 행까지 계속 이어지며, 이 모든 중간 단계의 값이 하나의 배열로 한꺼번에 표시됩니다. 매달 누적 매출이 어떻게 늘어나는지 그래프로 그려야 할 때처럼, 중간 과정 자체가 의미 있는 상황에서 특히 유용한 함수입니다.
4. REDUCE — 최종 결과 하나만 남기는 누적 계산
REDUCE 함수는 SCAN과 계산 방식이 매우 비슷하지만, 중간 결과를 모두 보여주는 대신 마지막에 도달한 최종 결과 하나만 반환한다는 점에서 차이가 있습니다. 다시 말해, 여러 값을 순서대로 하나씩 처리해 나가면서 최종적으로는 단 하나의 값으로 압축하는 함수입니다.
REDUCE 함수의 기본 구문
=REDUCE(start_value, array, lambda)
REDUCE의 위력을 제대로 살펴보기 위해, 여기서는 단순 합계 예시 대신 조금 다른 활용 사례를 살펴보겠습니다. 합계 계산은 최종 결과만 알면 되는 경우가 많아서 SCAN과의 차이를 체감하기 어렵기 때문입니다. 대신 아래와 같이 A열에는 고객명이, B열에는 각 고객의 관심 태그가 여러 행에 걸쳐 나뉘어 입력된 표가 있다고 가정하고, 특정 고객의 태그들을 하나의 문자열로 이어 붙이는 상황을 예로 들겠습니다.
=REDUCE("", B4:B7, LAMBDA(str,tag, str & ", " & tag))
여기서 시작 값은 빈 문자열("")이고, 범위는 B4:B7입니다(김민준 고객의 태그가 들어 있는 셀 범위). LAMBDA 안에서 str은 지금까지 만들어진 문자열을, tag는 배열에서 현재 처리 중인 태그 값을 의미합니다.
LAMBDA 내부의 str & ", " & tag 부분이 핵심인데, 기존 문자열 뒤에 쉼표와 새로운 태그를 계속 이어 붙이는 역할을 합니다. 예를 들어, 지금까지 만들어진 문자열이 "노트북, 대량구매"이고 다음으로 처리할 태그가 "재택근무"라면, 그다음 단계에서 만들어지는 문자열은 "노트북, 대량구매, 재택근무"가 됩니다.
다만, 이 수식을 그대로 쓰면 결과 문자열 맨 앞에 불필요한 쉼표와 공백이 붙는다는 문제가 있습니다. 이때는 TEXTAFTER 함수를 함께 써서 다음과 같이 다듬어 주면 깔끔하게 해결됩니다.
=TEXTAFTER(REDUCE("", B4:B7,
LAMBDA(str,tag, str & ", " & tag)), ", ")
이렇게 하면 맨 앞의 불필요한 쉼표와 공백이 제거된 상태로 "노트북, 대량구매, 재택근무, 헤드셋"과 같이 깔끔한 문자열을 얻을 수 있습니다.
FILTER와 결합해 특정 고객의 태그만 조건부로 합치기
앞의 수식은 B4:B7이라는 범위를 미리 알고 있어야 쓸 수 있다는 한계가 있습니다. 실제 업무에서는 고객마다 태그 개수가 다르고, 데이터도 고객명 기준으로 정렬되어 있지 않은 경우가 훨씬 많습니다. 이럴 때는 REDUCE에 범위를 직접 지정하는 대신, FILTER 함수로 원하는 고객의 태그만 먼저 걸러낸 다음 그 결과를 REDUCE에 넘기면 됩니다.
A4:A22에 고객명이, B4:B22에 태그가 들어 있고, 그중 "이서연"의 태그만 하나의 문자열로 합치고 싶다면 다음과 같이 작성합니다.
=TEXTAFTER(REDUCE("",
FILTER(B4:B22, A4:A22="이서연"),
LAMBDA(str,tag, str & ", " & tag)), ", ")
동작 원리는 이렇습니다. 먼저 FILTER(B4:B22, A4:A22="이서연")가 A열을 한 행씩 검사해서 "이서연"과 일치하는 행의 B열 값만 배열로 추출합니다. 이렇게 걸러진 배열을 REDUCE가 넘겨받아 쉼표로 하나씩 이어 붙이고, 마지막으로 TEXTAFTER가 맨 앞의 불필요한 쉼표와 공백을 제거합니다.
이 방식의 장점은 A열의 고객명이 어떤 순서로 흩어져 있어도 정확하게 작동한다는 것입니다. FILTER는 데이터가 정렬되어 있는지 여부와 관계없이 범위 전체를 훑으면서 조건에 맞는 행을 순서 그대로 골라내기 때문에, 이서연의 태그가 4~7행에 몰려 있든 다른 고객들 사이사이에 흩어져 있든 결과는 동일합니다. VLOOKUP처럼 데이터 정렬 여부에 따라 결과가 달라지거나 첫 번째 일치 값만 찾는 제약도 없습니다.
실무에서는 고객명(예: 이서연)을 수식에 직접 입력하는 대신, 별도의 셀(예: D1)에 고객명을 입력해 두고 그 셀을 참조하도록 만들면 훨씬 유용합니다. 그러면 D1의 값만 바꿔가며 고객별 태그 목록을 즉시 확인할 수 있습니다.
=TEXTAFTER(REDUCE("",
FILTER(B4:B22, A4:A22=D1),
LAMBDA(str,tag, str & ", " & tag)), ", ")
이때 만약 D1 셀이 비어 있거나 A열에 일치하는 고객명이 없으면 FILTER가 #CALC! 오류를 반환하므로, 필요하다면 IFERROR로 한 번 더 감싸서 "해당 고객 정보가 없습니다"와 같은 안내 메시지를 띄우는 것도 고려해 볼 만합니다. 태그를 합치는 예시 외에도, 여러 조건을 순서대로 적용해 하나의 최종 값을 도출해야 하는 상황이라면 REDUCE가 폭넓게 활용될 수 있습니다.
MVP TIP — 네 함수 한눈에 비교하기
앞에서 소개한 4가지 함수 모두 배열이나 범위를 대상으로 LAMBDA를 반복 적용한다는 공통점이 있지만, 결과를 반환하는 방식에는 분명한 차이가 있습니다. 아래 표로 정리해 두었으니 상황에 맞는 함수를 고를 때 참고하세요.
| 함수 | 계산 방향 / 반환 결과 | 언제 쓰나요? |
|---|---|---|
| BYCOL | 열마다 하나의 결과 (가로 배열) | 제품별·항목별로 열 단위 합계나 통계를 한 번에 구하고 싶을 때 |
| BYROW | 행마다 하나의 결과 (세로 배열) | 월별·거래별로 행 단위 합계나 통계를 한 번에 구하고 싶을 때 |
| SCAN | 모든 중간 결과를 배열로 반환 | 누적 매출처럼 과정 하나하나가 의미 있는 값을 확인하고 싶을 때 |
| REDUCE | 최종 결과 하나만 반환 | 여러 값을 순서대로 합쳐서 최종 값 하나만 필요할 때 |
자주 묻는 질문 (FAQ)
Q1. BYCOL, BYROW, SCAN, REDUCE는 어느 버전의 엑셀부터 사용할 수 있나요?
네 가지 함수 모두 Excel 365(Microsoft 365) 또는 Excel 2024 버전부터 사용할 수 있으며, Excel 2021 이하 버전에서는 지원되지 않습니다. 오래된 버전을 사용하고 있다면 먼저 버전을 확인해 보는 것이 좋습니다.
Q2. LAMBDA를 몰라도 이 함수들을 쓸 수 있나요?
네, 가능합니다. SUM이나 TEXTJOIN처럼 이미 이름이 정해진 함수라면 LAMBDA로 감싸지 않고 그대로 인수 자리에 넣어 사용할 수 있습니다. 다만 여러 조건을 조합하는 등 복잡한 계산이 필요할 때는 LAMBDA로 원하는 로직을 직접 정의해야 합니다.
Q3. SCAN과 REDUCE는 결과적으로 어떻게 다른가요?
두 함수 모두 누적 계산을 수행한다는 점은 같지만, SCAN은 계산 과정에서 나온 모든 중간 결과를 배열로 보여주는 반면 REDUCE는 마지막 결과 하나만 돌려준다는 차이가 있습니다. 진행 과정 자체를 보고 싶다면 SCAN을, 최종 값만 필요하다면 REDUCE를 사용하면 됩니다.
Q4. BYCOL이나 BYROW 대신 SUMIF, AVERAGEIF 같은 기존 함수를 쓰면 안 되나요?
단순 조건 합계나 평균이라면 SUMIF, AVERAGEIF로도 충분히 처리할 수 있습니다. 다만 열이나 행 전체에 사용자가 정의한 복잡한 계산 로직을 일괄 적용해야 하거나, 다른 동적 배열 함수와 자연스럽게 결합해야 하는 상황이라면 BYCOL·BYROW가 더 유연하고 간결한 대안이 됩니다.
마치며
LAMBDA 도우미 함수는 처음 접했을 때는 그 위력을 체감하기 어렵고, LAMBDA라는 개념 자체가 낯설게 느껴질 수 있습니다. 하지만 한 번 깊이 파고들어 익숙해지고 나면, 그동안 여러 줄의 수식이나 VBA 매크로로만 처리할 수 있었던 작업들을 단 한 줄의 수식으로 끝낼 수 있는 신세계가 열립니다. BYCOL과 BYROW는 반복적인 열·행 계산을, SCAN과 REDUCE는 누적 계산을 각각 담당하므로, 두 쌍의 함수만 제대로 익혀도 상당히 많은 반복 작업을 자동화할 수 있습니다.
이 글에서 소개한 BYCOL, BYROW, SCAN, REDUCE 외에도 LAMBDA 도우미 함수에는 MAP, MAKEARRAY, ISOMITTED 등이 더 있습니다. 이번 글로 LAMBDA 도우미 함수의 기본 작동 방식에 어느 정도 익숙해졌다면, 나머지 함수들도 크게 어렵지 않게 응용할 수 있으리라 생각합니다.
함수 하나로 반복 계산을 끝내는 방법을 익혔다면, 셀의 서식이나 잠금 상태처럼 눈에 잘 띄지 않는 정보를 점검하는 INFO·CELL 함수 활용법도 함께 살펴보시길 권합니다. 계산은 BYCOL·BYROW·SCAN·REDUCE로, 진단은 INFO·CELL로 처리하면 훨씬 탄탄한 스프레드시트를 만들 수 있습니다.