엑셀 셀에 #CALC!가 표시되면 주변 셀을 지우거나 계산 옵션을 바꾸기 전에 수식이 어떤 결과를 만들려고 했는지부터 확인해야 합니다.
#CALC!는 Excel 계산 엔진이 현재 지원하지 않는 배열 또는 함수 구조를 만났을 때 발생합니다. FILTER 함수가 아무 결과도 반환하지 못한 경우가 대표적이지만, 중첩 배열, 범위가 들어간 배열, 호출하지 않은 LAMBDA 등 다른 원인도 있습니다.
이 글은 Microsoft의 #CALC! 오류, FILTER 함수와 LAMBDA 함수 공식 문서를 기준으로 작성했습니다. 예제 수식의 범위와 조건은 사용 중인 파일의 데이터 구조에 맞게 변경해야 합니다.
![]() |
| 엑셀 #CALC! 오류는 FILTER의 빈 결과뿐 아니라 중첩 배열과 호출되지 않은 LAMBDA 등 여러 원인으로 발생합니다. 위 이미지는 오류 구조를 설명하기 위한 대표 개념 이미지입니다. |
#CALC! 오류에서 먼저 확인할 상세 유형
오류가 표시된 셀을 선택한 뒤 경고 아이콘이나 오류 상세 설명을 확인합니다. 다음 중 어떤 유형인지에 따라 수정할 위치가 달라집니다.
Empty Array 또는 빈 배열
Nested Array 또는 중첩 배열
Array of Ranges 또는 범위 배열
Cell Contains a Lambda 또는 셀에 LAMBDA 포함
Too Many Cells 또는 셀이 너무 많음
Function Has Failed 또는 함수 실패
Other 또는 기타
오류 상세 설명을 확인할 수 없다면 수식에 FILTER, OFFSET, MUNIT 또는 LAMBDA가 포함돼 있는지부터 살펴봅니다.
FILTER 결과가 없을 때 발생하는 빈 배열 오류
FILTER 함수가 조건에 맞는 행을 하나도 찾지 못하면 빈 배열을
반환하려고 합니다. Excel은 현재 빈 배열을 그대로 반환하지
못하므로 세 번째 인수인 [if_empty]가 없으면
#CALC!가 발생할 수 있습니다.
다음 수식은 D열에서 “완료”인 행만 반환합니다.
=FILTER(A2:D100,D2:D100="완료")
D2:D100 범위에 “완료”가 하나도 없다면 반환할 행이 없습니다. 결과가 없을 때 표시할 문구를 세 번째 인수에 지정합니다.
=FILTER(A2:D100,D2:D100="완료","결과 없음")
결과가 없을 때 셀을 비어 있는 것처럼 표시하려면 빈 문자열을 사용할 수 있습니다.
=FILTER(A2:D100,D2:D100="완료","")
D2:D100 범위에
#N/A나 #VALUE! 같은
오류가 포함돼 있다면 [if_empty]를 추가해도 해당
오류가 반환될 수 있습니다. 이때는 검색 결과가 없는 것이 아니라
조건 배열 자체에 오류가 있는지 먼저 확인해야 합니다.
배열 안에 다른 배열이 들어가는 중첩 배열 오류
Excel은 하나의 배열 안에서 서로 다른 크기의 배열을 다시 계산해 배치하는 구조를 지원하지 않습니다.
Microsoft 공식 문서의 대표적인 예는 다음 수식입니다.
=MUNIT({1,2})
이 수식은 1×1 배열과 2×2 배열을 하나의 배열 결과 안에 함께
반환하려고 합니다. 결과 배열의 크기가 서로 다르기 때문에
Nested Array 유형의 #CALC!가 발생합니다.
필요한 배열 크기를 하나의 값으로 지정하면 계산할 수 있습니다.
=MUNIT(2)
실제 수식에서는 배열을 반환하는 함수가 여러 단계로 중첩돼 있는지, 각 행이나 열의 계산 결과가 서로 다른 크기의 배열이 되는지 확인해야 합니다.
배열 요소가 값이 아니라 범위인 경우
Excel 배열에는 숫자, 텍스트, 오류, 논리값 등을 넣을 수 있지만 여러 셀 범위 자체를 배열의 개별 요소처럼 반환하는 구조는 지원되지 않습니다.
다음 수식은 OFFSET의 높이 인수에 배열을 전달합니다.
=OFFSET(A1,0,0,{2,3})
이 수식은 높이가 2인 범위와 높이가 3인 범위를 하나의 결과 배열에
함께 넣으려고 하므로 Array of Ranges 유형의
#CALC!가 발생합니다.
반환할 범위의 높이와 너비를 단일 값으로 지정합니다.
=OFFSET(A1,0,0,2,3)
여러 범위의 값이 필요하다면 범위별 계산을 분리하고, 최종 수식이 셀 범위 자체가 아니라 숫자나 텍스트로 구성된 일정한 배열을 반환하도록 다시 구성해야 합니다.
LAMBDA를 정의하고 호출하지 않은 경우
LAMBDA 함수는 매개 변수와 계산식을 정의해 재사용할 수 있는 함수를 만드는 기능입니다. 하지만 셀에 LAMBDA 정의만 입력하면 함수가 실행되지 않습니다.
=LAMBDA(x,x+1)
위 수식은 x에 전달할 값을 지정하지 않았으므로
Cell Contains a Lambda 유형의 #CALC!를 반환합니다.
LAMBDA 정의 뒤에 호출 괄호를 추가하고 값을 전달합니다.
=LAMBDA(x,x+1)(1)
x에 1이 전달되므로 결과는 2입니다. 반복해서 사용할 함수라면 수식 → 이름 관리자에서 이름을 지정한 뒤 일반 함수처럼 호출할 수 있습니다.
LAMBDA를 호출하지 않으면 #CALC!가 발생할 수 있습니다.
잘못된 개수의 인수를 전달하면 #VALUE!가 발생할 수 있습니다.
재귀 호출이 지나치게 많으면 #NUM!이 발생할 수 있습니다.
수식의 최종 결과가 함수 자체인지 확인합니다
LET와 LAMBDA를 함께 사용하거나 이름 관리자에서 만든 함수를 조합할 때, 최종 결과가 계산된 값이 아니라 호출되지 않은 함수 자체가 될 수 있습니다.
이 경우 함수 이름이나 LAMBDA 정의 뒤에 필요한 괄호와 인수를 추가해야 합니다. LET 수식이라면 마지막 인수가 실제 값이나 배열을 반환하는지 확인합니다.
웹용 Excel에서 셀이 너무 많다고 표시되는 경우
Microsoft 공식 문서에서는 웹용 Excel에서 10,000개가 넘는 셀을 참조하는 사용자 지정 함수를 계산할 때 #CALC!가 발생할 수 있다고 설명합니다.
이는 모든 일반 Excel 수식에 적용되는 공통 제한이 아닙니다. 웹용 Excel에서 사용자 지정 함수를 사용하는 특정 상황에 해당합니다.
파일을 데스크톱용 Excel에서 열거나, 사용자 지정 함수가 참조하는 셀 범위를 10,000개 이하로 줄입니다. 전체 열 참조 대신 실제 데이터가 있는 범위만 지정하는 방법도 검토합니다.
Function Has Failed 또는 Other가 표시되는 경우
Function Has Failed는 비동기 작업을 수행하는 함수가 예상대로 완료되지 않았을 때 표시될 수 있습니다. Microsoft는 이 경우 잠시 후 다시 시도하도록 안내합니다.
Other는 Excel 계산 엔진이 배열 오류를 구체적인 유형으로 분류하지 못한 경우입니다. 이때는 IFERROR로 오류를 감추기 전에 수식을 작은 부분으로 나눠 오류가 시작되는 위치를 찾습니다.
- 가장 안쪽에 있는 함수만 별도 셀에 입력합니다.
- 함수가 값, 배열 또는 범위 중 무엇을 반환하는지 확인합니다.
- 정상이라면 바깥쪽 함수를 한 단계씩 추가합니다.
- 오류가 시작되는 단계에서 중첩 배열이나 범위 배열을 찾습니다.
- 필요하면 수식 탭의 수식 계산 기능으로 중간 결과를 확인합니다.
IFERROR는 잘못된 배열 구조를 수정하지 않습니다
IFERROR는 오류가 발생했을 때 다른 문구나 값을 표시하지만, 지원되지 않는 중첩 배열이나 호출하지 않은 LAMBDA를 정상적인 수식으로 바꾸지는 않습니다.
FILTER의 검색 결과가 없는 상황을 정상적으로 처리하려면
IFERROR보다 FILTER의 세 번째 [if_empty] 인수를
사용하는 편이 원인을 더 명확하게 보여줍니다.
=FILTER(A2:D100,D2:D100="완료","결과 없음")
반대로 중첩 배열, 범위 배열 또는 LAMBDA 호출 문제가 있다면 오류를 감추기 전에 수식 구조부터 수정해야 합니다.
#CALC!, #SPILL!과 계산되지 않는 수식의 차이
| 화면에 나타나는 현상 | 주요 원인 | 먼저 수정할 위치 |
|---|---|---|
#CALC!
|
빈 배열, 중첩 배열, 범위 배열, LAMBDA 미호출 | 수식이 반환하려는 결과 구조 |
#SPILL!
|
방해 셀, 병합 셀, 표 내부 수식 또는 워크시트 경계 | 배열 결과가 펼쳐질 셀 범위 |
| 값이 바뀌지 않음 | 수동 계산 설정, 참조 문제 또는 순환 참조 | 계산 옵션과 참조 구조 |
| 수식이 그대로 표시됨 | 텍스트 서식, 수식 표시 기능 또는 작은따옴표 | 셀 서식과 표시 설정 |
오류 상세 설명에 따라 수정할 위치
FILTER 조건을 확인하고 세 번째
[if_empty] 인수를
지정합니다.
배열 안에서 크기가 다른 배열을 반환하는 부분을 단일 크기의 결과로 변경합니다.
배열 요소로 반환되는 범위 참조를 제거하고 실제 값 배열을 반환하도록 수식을 나눕니다.
LAMBDA 정의 뒤에 괄호와 필요한 인수를 추가해 함수를 호출합니다.
웹용 Excel의 사용자 지정 함수라면 참조 범위를 줄이거나 데스크톱용 Excel에서 파일을 엽니다.
중첩 수식을 안쪽부터 분리하고 수식 계산 기능으로 오류가 시작되는 부분을 찾습니다.
내용 확인에 사용한 Microsoft 공식 자료
공식 문서 확인일: 2026년 7월 28일

댓글 쓰기