본문 바로가기
문서

엑셀에서 숫자로 보이는데 합계가 0으로 나올 때

by 무나주 2026. 9. 20.

시스템에서 내려받은 표를 엑셀로 열고 금액 열에 SUM을 걸었더니 결과가 0입니다. 화면에는 분명히 1250, 3400 같은 숫자가 줄지어 있습니다.

셀에는 보이는 값과 별개로 자료형이 함께 저장됩니다. 계산은 그 자료형을 봅니다. 같은 숫자를 두 방식으로 넣고 파일 안에 무엇이 저장되는지, SUM이 어떻게 갈리는지 직접 확인했습니다.

엑셀 텍스트 숫자 실측 표. 같은 값 다섯 개를 숫자로 넣은 열과 텍스트로 넣은 열은 화면에 똑같이 1250으로 보이지만, 파일에 저장된 자료형이 n과 s로 다르다. COUNT는 5개와 0개, SUM은 23,140과 0으로 갈린다. 고치는 방법은 VALUE 함수, 1을 곱하기, 텍스트 나누기가 23,140으로 해결되고 셀 서식만 숫자로 바꾸기는 0으로 그대로다. 측정 환경은 윈도우 11, 파이썬 3.14.6, openpyxl 3.1.5

화면은 같은데 파일 안이 다릅니다

1250, 3400, 890, 12000, 5600 다섯 값을 두 열에 넣었습니다. 합은 23,140이어야 합니다. 한쪽은 그냥 숫자로, 다른 쪽은 셀 서식을 텍스트로 지정한 뒤 넣었습니다.

넣은 방식 화면 표시 파일 속 자료형 COUNT SUM
숫자로 넣기 1250 n (숫자) 5개 23,140
텍스트로 넣기 1250 s (문자) 0개 0

파일 속 자료형은 xlsx를 열어 셀 속성을 직접 읽은 값입니다. 하나는 n, 다른 하나는 s로 저장돼 있습니다.

눈으로 구분하기 어려우니 COUNT를 먼저 걸어 보시면 됩니다. COUNT는 숫자만 세는 함수라서, 다섯 칸을 지정했는데 0이 나오면 전부 글자라는 뜻입니다. SUM이 0이라는 사실보다 COUNT가 0이라는 사실이 원인을 정확히 짚어 줍니다.

맨눈으로 보는 방법도 있습니다. 아무 서식도 건드리지 않은 상태에서 숫자는 오른쪽, 글자는 왼쪽으로 붙습니다. 한 열 안에서 정렬이 들쭉날쭉하면 섞여 있다는 신호입니다.


서식을 숫자로 바꾸는 것은 답이 아닙니다

가장 먼저 시도하게 되는 방법이 셀 서식 변경입니다. 실제로 해 봤더니 결과가 이렇게 나왔습니다.

고치는 방법 SUM 결과 판정
VALUE 함수로 감싸기 23,140 해결됨
1을 곱하기 23,140 해결됨
텍스트 나누기 실행 23,140 해결됨
셀 서식만 숫자로 바꾸기 0 그대로

서식은 이미 들어 있는 값을 어떻게 보여 줄지를 정하는 설정입니다. 값 자체를 바꾸지 않습니다. 그래서 글자로 굳은 셀에 숫자 서식을 씌워도 계산에서는 여전히 글자입니다.

서식을 바꾼 뒤 셀을 하나씩 더블클릭하고 엔터를 치면 그때 숫자로 바뀝니다. 값을 다시 입력하는 것과 같기 때문입니다. 수백 줄이라면 할 일이 아닙니다.

실제로 되는 세 가지

1. 텍스트 나누기가 가장 빠릅니다. 열 전체를 선택하고 데이터 탭에서 텍스트 나누기를 누른 뒤, 나누지 않고 그대로 마침만 누릅니다. 엑셀이 값을 다시 읽으면서 숫자로 인식합니다. 위 측정에서도 이 방법으로 23,140이 나왔습니다.
2. 옆 칸에 VALUE 함수를 쓰고 결과를 값으로 붙여넣기 합니다. =VALUE(B2) 형태입니다.
3. 1을 곱합니다. =B2*1도 같은 결과를 냅니다. 빈 칸에 1을 넣고 복사한 뒤 선택하여 붙여넣기에서 곱하기를 고르면 여러 칸을 한 번에 처리할 수 있습니다.

파일이 여러 개거나 매번 같은 형식으로 받는다면 코드로 걸러 내는 편이 낫습니다. 어느 칸이 글자인지 먼저 찾아 줍니다.

from openpyxl import load_workbook

wb = load_workbook("받은자료.xlsx")
ws = wb.active

for row in ws.iter_rows(min_row=2):
    for cell in row:
        # data_type 이 's' 면 문자, 'n' 이면 숫자다
        if cell.data_type == "s" and str(cell.value).replace(",", "").isdigit():
            print(f"{cell.coordinate}  글자로 들어 있음: {cell.value}")
            cell.value = int(str(cell.value).replace(",", ""))

wb.save("고친자료.xlsx")

쉼표가 섞인 1,250 같은 값도 같이 처리됩니다. 다만 앞에 0이 붙은 사번이나 우편번호는 숫자로 바꾸면 그 0이 사라지니, 계산할 열에만 적용하셔야 합니다.


왜 글자로 들어왔을까

대부분은 파일을 만든 쪽에서 정해집니다. 웹에서 내려받은 표를 붙여 넣거나, 시스템이 내보낸 CSV를 열거나, 셀 서식이 텍스트로 지정된 양식에 값을 채워 넣은 경우입니다. 숫자 앞에 공백이나 눈에 안 보이는 문자가 붙어 있어도 같은 일이 벌어집니다.

보이는 것과 저장된 것이 어긋나는 문제는 이것 말고도 있습니다. 백분율이 소수로 읽히는 경우는 표시값과 저장값을 가른 글에, 긴 번호의 뒷자리가 바뀌는 경우는 정밀도를 다룬 글에 정리해 두었습니다.

 

합계가 이상하면 SUM을 다시 걸어 보기 전에 같은 범위에 COUNT를 걸어 보세요. 몇 칸이 숫자로 세어지는지가 원인을 바로 알려 줍니다.

 

위 결과는 윈도우 11에서 엑셀로 표를 만들어 각 방법을 실제로 실행한 값이고, 셀 자료형은 저장된 xlsx를 파이썬 3.14.6과 openpyxl 3.1.5로 열어 읽었습니다. 시험에 쓴 통합 문서는 10,025바이트짜리 한 장입니다.