엑셀 파일을 구글시트로 올리면 대부분 그대로 열립니다. 그래서 "옮겨졌다"고 생각하기 쉽지만, 열린다는 것과 같은 값이 나온다는 것은 다른 이야기입니다. 이 글은 가설재 임대 장부를 구글시트로 옮기는 시연(가상 업체 데이터, 도입 사례 아님)에서 실제로 값이 달라졌던 세 군데와, 옮긴 뒤 확인하는 순서를 적은 것입니다. 시연 전체는 가설재 임대 엑셀 장부 시연 기록에 있습니다.
1. 한글 금액 표기 함수가 사라진다
거래명세서 합계 옆의 "금액 일십삼만삼천사백원" 같은 표기는 엑셀의 NUMBERSTRING 함수로 만든 경우가 많습니다. 구글시트에는 이 함수가 없어서 해당 칸이 #NAME? 오류가 됩니다. 이 경우는 눈에 보이니 알아챌 수 있습니다. 시연에서는 시트에 붙는 스크립트로 같은 일을 하는 함수를 만들어 두고, 이미 오류가 박힌 칸은 수식을 한 번 다시 입력해 새 함수를 인식시켰습니다. 결과가 엑셀에 저장돼 있던 한글 표기와 같은 것을 확인했습니다.
2. 배열로 계산되던 수식이 첫 칸만 계산한다
가장 조심해야 할 경우입니다. 줄마다 세액을 원 단위로 절삭하고 합계에서 차이를 맞추는 명세서였는데, "마지막으로 값이 있는 행을 찾는" LOOKUP(2,1/(범위<>""),…) 모양의 수식이 엑셀에서는 배열로 계산됐지만 구글시트에서는 첫 칸만 계산됐습니다. 오류 표시는 없고 세액 합계만 엑셀과 달라졌습니다. 수식 안의 1/(범위<>"") 부분을 ARRAYFORMULA로 감싸 해당 38칸을 고친 뒤, 합계가 엑셀 저장값과 같아지는 것을 확인했습니다.
3. 연동 드롭다운이 비어 버린다
품명을 고르면 그 품명의 규격만 목록에 나오는 연동 드롭다운은 엑셀에서 INDIRECT로 이름 범위를 참조해 만든 경우가 많습니다. 구글시트로 옮기면 화살표만 뜨고 목록이 비어 있었습니다. 이 건은 시연 단계에서 고치지 않았습니다. 품명이 바뀔 때 스크립트가 규격 목록을 다시 걸어 주는 방법이 있지만, 실제 도입 때 거래처 데이터로 하는 일로 남겨 두었습니다. 이 글에서 고쳤다고 쓸 수 있는 것은 앞의 두 건뿐입니다.
한눈에 보는 비교표
| 엑셀에서 쓰던 것 | 구글시트에서 일어난 일 | 눈에 보이나 |
|---|---|---|
NUMBERSTRING 한글 금액 | 함수가 없어 #NAME? | 보임 |
LOOKUP(2,1/(범위<>""),…) 배열 수식 | 첫 칸만 계산, 합계만 달라짐 | 안 보임 |
INDIRECT 연동 드롭다운 | 화살표만 뜨고 목록이 빔 | 눌러 봐야 보임 |
| 시간대가 다른 계정의 사본 | 시연에서는 차이 없음(GMT+14 포함) | 직접 대조해야 앎 |
표에서 보듯 위험도는 "눈에 보이는가"로 갈립니다. #NAME?처럼 오류가 뜨는 깨짐은 한 번 훑으면 잡힙니다. 반대로 두 번째 줄처럼 숫자만 조용히 달라지는 깨짐은 엑셀 값과 나란히 놓고 비교하지 않으면 그대로 거래처에 나가는 명세서에 들어갑니다. 아래에서는 세 가지 깨짐을 하나씩 조금 더 자세히 풀어 쓰고, 그다음에 어디까지를 혼자 점검할 수 있는지 정리합니다.
왜 "열린다"만으로는 부족한가
엑셀을 구글시트로 변환하는 기능은 파일의 값과 서식, 대부분의 함수를 옮겨 줍니다. 그래서 변환 직후 화면은 원본과 거의 같아 보입니다. 하지만 변환기는 두 프로그램이 같은 수식을 같은 방식으로 계산한다는 것을 보장하지 않습니다. 계산 엔진이 서로 다르고, 한쪽에만 있는 함수가 있고, 같은 이름의 함수여도 배열을 다루는 방식이 다릅니다.
작은 업체의 장부에서 이 차이가 문제가 되는 순간은 대개 월말입니다. 한 달 동안 쌓인 줄을 모아 거래명세서를 만들고, 합계와 세액을 거래처에 보내는 시점입니다. 평소 하루 몇 건씩 입력할 때는 아무 문제 없어 보이다가, 합계 칸에서 뒤늦게 숫자가 어긋난 것을 발견하면 어디서부터 틀렸는지 거슬러 올라가야 합니다. 그래서 옮기는 날 계산이 쌓이는 칸을 미리 대조해 두는 것이 가장 쌉니다.
한글 금액 표기, 오류가 보이는 경우
NUMBERSTRING은 구글시트에 같은 이름으로 존재하지 않습니다. 변환하면 그 칸이 #NAME?으로 바뀌고, 명세서 하단의 "금액 ○○원" 줄이 오류로 나옵니다. 이런 칸은 한 번 훑으면 잡히니 다행입니다. 고치는 방법은 둘 중 하나입니다. 하나는 시트에 붙는 스크립트(Apps Script)로 같은 일을 하는 사용자 정의 함수를 만드는 것이고, 다른 하나는 숫자를 한글로 바꾸는 수식을 시트 함수만으로 길게 쓰는 것입니다. 시연에서는 앞의 방법을 썼고, 칸의 수식은 엑셀에 있던 모양 그대로 두어 담당자가 수식을 바꾸지 않아도 되게 했습니다.
한 가지 함정이 있었습니다. 이미 #NAME?이 저장된 칸은 함수를 추가한 뒤에도 바로 다시 계산되지 않았습니다. 칸을 선택해 수식을 한 번 다시 입력해야 새 함수를 인식했습니다. 함수를 만들어 놓고 "아직 오류네"라고 되돌아가는 일이 없도록 이 순서를 적어 둡니다.
세액 절삭, 오류 없이 숫자만 달라진 경우
이 명세서는 줄마다 세액을 원 단위로 절삭했고, 합계 줄에서 절삭하며 생긴 차이를 한 줄에 몰아 맞추는 구조였습니다. 차이를 어느 줄에 얹을지 정하려고 "값이 들어 있는 마지막 행 번호"를 찾는 수식을 썼습니다. 엑셀에서는 LOOKUP(2,1/(범위<>""),행번호) 같은 모양이 배열 계산으로 동작합니다. 범위의 비어 있지 않은 칸은 1, 빈 칸은 오류가 되고, 오류를 건너뛰고 마지막 값의 위치를 돌려주는 방식입니다.
구글시트에서는 같은 수식이 배열 문맥이 아니면 범위 전체를 한꺼번에 계산하지 않고 첫 칸 기준으로만 계산했습니다. 결과로 엉뚱한 행이 선택되었고, 차이를 얹는 칸이 다른 줄의 세액을 덮어썼습니다. 오류 표시가 전혀 없었습니다. 합계 세액만 엑셀 저장값과 달랐고, 그 차이는 원 단위였습니다. 원 단위 차이는 눈으로 훑어서는 거의 잡히지 않습니다. 그래서 이 깨짐은 엑셀에 저장돼 있던 합계와 시트가 계산한 합계를 나란히 놓고 비교해서만 발견할 수 있었습니다.
고친 방법은 해당 수식의 1/(범위<>"") 부분만 ARRAYFORMULA로 감싸 구글시트가 배열로 계산하게 하는 것이었습니다. 같은 수식이 들어 있던 38칸에 같은 보정을 넣었고, 합계 세액이 엑셀 저장값과 일치하는 것을 확인했습니다. 수식 전체를 새로 짜지 않고 필요한 부분만 감싼 이유는, 원래 수식이 업체가 오래 써 온 계산 방식이라 구조를 바꾸면 다른 곳에서 새 차이가 생길 수 있기 때문입니다.
연동 드롭다운, 눌러 봐야 보이는 경우
품명을 고르면 그 품명에 해당하는 규격만 목록에 뜨게 한 연동 드롭다운은, 엑셀에서 품명과 같은 이름의 범위를 INDIRECT로 가리키는 방식으로 만든 경우가 흔합니다. 변환 후에는 칸에 화살표가 남아 있는데 눌러 보면 목록이 비어 있었습니다. 화면만 보면 정상처럼 보이므로 직접 눌러 봐야 알 수 있는 깨짐입니다.
이 건은 시연 단계에서 고치지 않았습니다. 방법은 있습니다. 품명이 바뀔 때 스크립트가 해당 품명의 규격 목록으로 드롭다운을 다시 걸어 주는 방식입니다. 다만 실제 거래처의 품목 목록으로 설치할 때 해야 의미가 있는 작업이라 그 단계로 남겼습니다. 이 글이 "고쳤다"고 말하는 것은 앞의 두 건뿐인 이유입니다.
시간대 차이는 어떻게 확인했나
구글시트는 파일마다 시간대 설정을 가지고 있고, 사본을 만들면 그 설정이 따라가거나 계정 설정에 맞춰질 수 있습니다. 날짜 계산이 시간대에 따라 하루씩 밀리면 명세서의 시작일과 종료일, 일수 계산이 모두 달라집니다. 이를 확인하려고 시연에서는 가장 큰 시차인 GMT+14로 시간대를 바꾼 사본을 만들어 명세서와 미회수 표를 다시 만들고 원본과 칸 단위로 비교했습니다. 두 표 모두 한 칸도 다르지 않았습니다.
여기서 알 수 있는 것과 알 수 없는 것을 나눠 적습니다. 알 수 있는 것은, 이 시연의 계산이 시간대 설정에 흔들리지 않는다는 점입니다. 알 수 없는 것은, 다른 구글 계정이 사본을 만들 때 "확인되지 않은 앱" 경고가 뜨는지입니다. 시연은 계정 하나에서 했고 그 계정에서는 원본과 사본 모두 경고가 없었습니다. 다른 계정은 직접 해 보기 전에는 모르는 일이어서 설명서에는 두 경우를 모두 적어 둡니다.
옮긴 뒤 확인하는 순서
- 먼저 원본 엑셀은 건드리지 않고 복사본을 드라이브에 올려 구글시트로 변환합니다.
- 계산이 쌓이는 칸 열 개쯤(합계, 세액, 한글 금액, 날짜 계산, 조건에 따라 달라지는 칸)을 골라 엑셀 값과 시트 값을 나란히 비교합니다.
#NAME?,#REF!,#VALUE!가 뜬 칸을 모읍니다. 엑셀에만 있는 함수는#NAME?이 됩니다.- 오류는 없는데 숫자가 다른 칸을 찾습니다. 배열로 계산되던 수식이 의심 대상입니다.
- 드롭다운, 조건부 서식, 보호 범위가 남아 있는지 눌러서 확인합니다.
- 일주일은 엑셀과 시트에 모두 적어 보고, 두 곳의 합계가 일치하는 주가 이어지면 엑셀 입력을 끊습니다.
복사한 시트는 시간대 설정이 계정에 따라 달라질 수 있어 날짜 계산이 하루씩 밀리는지도 한 번 보는 편이 좋습니다. 시연에서는 가장 큰 시차인 GMT+14 사본에서도 명세서와 미회수 표가 원본과 달라지지 않았습니다. 다른 구글 계정이 사본을 만들 때의 권한 경고는 아직 직접 확인하지 못했습니다.
여섯 번째 단계까지는 계정과 시트만 있으면 혼자 할 수 있습니다. 어디까지 함수로 풀리고 어디부터 따로 만들어야 하는지는 엑셀 반복 작업 자동화, 어디까지 가능한가에 정리해 두었습니다.
나란히 비교하는 방법
"엑셀 값과 시트 값을 비교하라"는 말은 쉽지만, 눈으로 칸을 하나씩 보면 놓칩니다. 시연에서 쓴 방식은 기계적입니다. 엑셀에 저장돼 있던 값은 수식이 아니라 값만 복사해 시트 한쪽에 붙여 두고, 변환된 시트가 계산한 칸과 같은 모양으로 겹쳐 놓습니다. 그다음 두 칸의 차이를 계산하는 칸을 만들어 0이 아닌 칸만 모아 봅니다. 0이 아닌 칸이 없으면 그 범위는 같은 값이라는 뜻입니다.
비교할 때 지켜야 할 것이 세 가지 있습니다.
첫째, 엑셀 쪽 값은 엑셀이 마지막으로 저장한 값을 씁니다. 구글시트에서 다시 계산시킨 값을 기준으로 삼으면 둘을 비교하는 의미가 없어집니다. 변환 전 원본이 필요한 이유입니다.
둘째, 합계처럼 마지막에 모이는 칸만 보지 말고, 합계로 가는 중간 칸도 봅니다. 시연의 세액 문제는 합계 칸에서 발견되었지만 원인은 중간의 "마지막 행을 찾는" 칸이었습니다. 합계가 다르면 그 합계를 만드는 칸을 거슬러 올라가 처음 달라지는 칸을 찾습니다.
셋째, 비교는 한 번으로 끝내지 않습니다. 수식을 고친 뒤에 다시 비교해 0이 나오는지 확인합니다. 한 군데를 고치다 다른 칸이 달라지는 경우가 있기 때문입니다. 시연에서는 출고·회수 826행의 잔량과 상태, 명세서 28행 × 15칸, 미회수 214건 표를 고친 뒤에 각각 다시 대조해서 불일치 0을 확인했습니다.
옮기지 않는 편이 나은 경우
모든 엑셀 장부가 구글시트로 옮겨질 필요는 없습니다. 다음과 같은 경우에는 옮기기 전에 한 번 더 따져 보시기를 권합니다.
| 상황 | 이유 |
|---|---|
| 한 장부에 수만 행이 쌓여 있다 | 시트가 느려져 입력할 때마다 기다리게 됩니다 |
| 매크로(VBA)에 업무가 깊게 얽혀 있다 | 구글시트에서는 스크립트로 새로 만들어야 합니다 |
| 현장 직원이 수십 명이라 권한을 정교하게 나눠야 한다 | 시트 권한은 시트·범위 단위라 한계가 있습니다 |
| 세금계산서 발행까지 한 화면에서 끝내야 한다 | 전용 프로그램이나 발행 서비스가 낫습니다 |
반대로 하루 몇 건에서 몇십 건을 적는 작은 업체이고, 지금 쓰는 명세서 양식을 바꾸고 싶지 않고, 매달 사용료가 부담스럽다면 구글시트로 옮기는 쪽이 맞을 가능성이 큽니다. 다만 이 판단도 위의 비교에서 불일치가 0이 나온 뒤에 내릴 일입니다. 비교도 하지 않고 "대충 옮겨졌겠지"라고 넘어가면 월말에 거래처가 먼저 숫자 차이를 발견합니다.
이 글이 말하지 않는 것
이 글의 세 가지 깨짐은 가설재 임대 장부 한 건에서 나온 것입니다. 엑셀의 모든 함수가 구글시트에서 같은 문제를 보인다는 뜻이 아닙니다. 다른 장부에는 다른 함수와 다른 깨짐이 있을 수 있고, 그래서 일반적인 목록을 믿기보다 내 장부의 계산 칸을 직접 비교하라고 권하는 것입니다. 또한 시연은 가상 업체 데이터로 한 것이어서, 실제 거래처의 예외(중간에 단가가 바뀌는 현장, 거래처마다 다른 청구 방식)는 범위 밖입니다. 손으로 명세서를 만들던 시간과 비교한 수치도 받은 것이 없어 적지 않았습니다.
옮기기 전에 챙겨 둘 것
변환을 시작하기 전에 해 둘 일이 있습니다. 어느 것도 어렵지 않지만, 빠뜨리면 나중에 비교할 기준이 없어집니다.
먼저 원본 엑셀 파일을 날짜를 붙여 따로 보관합니다. 변환은 사본으로 하고, 원본은 열어서 저장하지도 않습니다. 열어서 저장하는 순간 마지막으로 저장된 값이 바뀔 수 있기 때문입니다. 이 파일이 앞에서 말한 "엑셀이 마지막으로 저장한 값"의 기준입니다.
다음으로 계산이 쌓이는 칸의 목록을 만듭니다. 합계, 세액, 한글 금액, 날짜 차이, 조건에 따라 값이 달라지는 칸을 시트 이름과 칸 주소로 적어 두면 충분합니다. 열 개 안팎이면 반나절 안에 비교가 끝납니다. 목록이 없으면 "다 봤다"는 느낌만 남고 어떤 칸을 봤는지 알 수 없습니다.
마지막으로, 거래처에 이미 나간 명세서 한두 장을 골라 둡니다. 시트가 만든 명세서를 이미 나간 명세서와 비교하면 양식과 금액이 실제 거래처가 받는 것과 같은지 확인할 수 있습니다.
자주 나오는 질문
변환하면 엑셀의 서식도 다 옮겨지나요? 열 너비, 병합, 글꼴, 테두리는 대체로 옮겨집니다. 깨지기 쉬운 것은 서식이 아니라 수식과 드롭다운 같은 동작입니다. 그래서 이 글은 값 비교에 무게를 두었습니다.
오류가 없으면 안심해도 되나요? 아닙니다. 위의 세액 사례가 정확히 그 반대 경우입니다. 오류가 없다는 사실은 오류 표시가 있는 깨짐이 없다는 뜻일 뿐입니다.
혼자 점검할 수 없으면 어떻게 하나요? 점검 순서의 여섯 번째까지는 계정과 시트만 있으면 혼자 할 수 있습니다. 막히는 칸이 있으면 그 칸의 수식과 엑셀 저장값을 함께 알려 주시면 원인을 같이 볼 수 있습니다.
비교 결과를 남겨 두는 법
비교가 끝나면 결과를 한 장에 적어 둡니다. 비교한 칸의 주소, 엑셀 저장값, 시트 값, 차이, 고친 방법, 고친 뒤 다시 비교한 결과를 한 줄씩 적으면 됩니다. 나중에 거래처가 숫자를 물어 오거나 담당자가 바뀔 때 이 기록이 "그때 무엇을 확인했는가"를 말해 줍니다. 기록이 없으면 확인했다는 말은 기억에만 있게 되고, 기억은 인수인계에서 가장 먼저 사라집니다.
기록에는 확인하지 못한 것도 함께 적습니다. 이 글의 시연이라면 다른 계정에서의 권한 경고, 몇 년치 장부가 쌓였을 때의 속도, 연동 드롭다운의 복구가 그 항목입니다. 확인하지 못한 것을 확인한 것처럼 적으면 다음 사람이 그 칸을 믿고 넘어가게 됩니다. 반대로 "아직 모름"이라고 적혀 있으면 도입하는 날 그 칸부터 보게 됩니다.
한 가지만 더 덧붙입니다. 비교 기록은 길 필요가 없습니다. 열 줄이면 충분하고, 그 열 줄이 월말에 명세서 숫자가 어긋났을 때 원인을 찾는 시간을 크게 줄여 줍니다. 처음 옮기는 날 한 번만 만들어 두면 장부를 고칠 때마다 같은 칸을 다시 비교하는 기준표로도 쓸 수 있습니다.
문의
내 엑셀 장부가 어떤 모양으로 옮겨질지 먼저 보고 싶다면 무료 진단 문의로 현재 장부의 구조를 알려 주세요. 맞지 않는 경우에는 맞지 않는다고 말씀드립니다. 가설재·장비 임대 장부 설치형 상품은 크몽 상품 페이지에서만 문의와 결제를 받습니다. 가격은 가격 안내에 있습니다.