AI 해결 노트 · 2026-09-18 · 실측 2026-09-18

견적서 세액이 0과 32억이 된 이유 — $ 하나로 기준 칸을 붙들어 두기

한 줄로

부가세율을 D1 한 칸에 적어 두고 =D4*D1로 세액을 구한 뒤 아래로 복사하면, 둘째 줄부터 세율 자리에 D2·D3·D4가 들어옵니다. 더미 견적서 5줄에서 세액이 2400 → 0 → #VALUE! → 32억 6400만 → 26억 2500만으로 나왔고 합계는 #VALUE!였습니다. =D4*$D$1로 고친 열은 합계 28,400원이 나왔습니다.

증상

실측 환경

항목
OSWindows 11 Home (10.0.26200)
Excel16.0 (빌드 20326.0)
조작 방법Excel COM (Excel.Application, Visible=false). 셀에 수식 문자열을 넣고, 복사는 Range.Copy + Range.PasteSpecial(xlPasteAll) 로 했습니다. 키보드 F4를 실제로 눌러 본 시험이 아닙니다
시험 파일직접 만든 더미 X1_42_견적서.xlsx
로그원자료\excel-absolute-reference\01_absolute_실행로그.txt, 02_png_렌더로그.txt (스크립트 X1_42_absolute.py, X1_42_png.py 도 같은 폴더)

더미 견적서

부가세율을 D1 한 칸에 10%로 적고, 아래에 품목 5줄을 뒀습니다. 공급가(D열)는 D4에 =B4*C4를 넣고 D5:D8로 복사해 채웠습니다. 복사된 칸에는 =B5*C5부터 =B8*C8까지가 들어갔고 값은 모두 그 줄의 수량 × 단가와 맞았습니다. 참조하는 칸이 줄마다 같이 내려가야 맞는 자리이기 때문입니다.

세액을 두 가지로 계산했습니다. E열에는 =D4*D1을 넣고 아래로 복사했고, F열에는 =D4*$D$1을 넣고 같은 방식으로 복사했습니다.

상대참조 E열과 $D$1로 고정한 F열의 결과, 각 칸에 남은 수식
상대참조 E열과 $D$1로 고정한 F열의 결과, 각 칸에 남은 수식
품목수량단가공급가세액 E (=D4*D1 복사)E칸에 남은 수식세율 자리에 들어온 값세액 F ($D$1)
볼펜201200240002400=D4*D1D1 = 10%2400
노트103500350000=D5*D2D2 = (빈칸)3500
파일5280014000#VALUE!=D6*D3D3 = 「공급가」1400
토너2680001360003264000000=D7*D4D4 = 2400013600
용지325000750002625000000=D8*D5D5 = 350007500
합계수식
공급가=SUM(D4:D8)284,000
세액 (상대참조 E열)=SUM(E4:E8)#VALUE!
세액 ($D$1 F열)=SUM(F4:F8)28,400

첫 줄만 맞았습니다. 둘째 줄의 세율 자리에는 빈칸인 D2가 들어와 0이 곱해졌고, 셋째 줄은 머리글 「공급가」라는 글자가 들어와 #VALUE!가 됐습니다. 넷째·다섯째 줄은 자기 위쪽 줄의 공급가가 세율 자리에 들어앉아 억 단위가 됐습니다.

여기서 눈여겨볼 곳은 둘째 줄입니다. 0은 오류 표시가 없습니다. 밀려난 자리에 빈칸 대신 다른 비율이 들어 있으면 어떻게 되는지 따로 만들어 봤습니다. D1에 부가세율 0.1, 바로 아래 D2에 지난달 할인율 0.05를 남겨 둔 표입니다.

품목공급가세액(상대참조)그 칸 수식세액($D$1)
볼펜240002400=D4*D12400
노트350001750=D5*D23500

둘째 줄은 35,000 × 0.05 = 1,750입니다. 오류 표시도 없고 금액도 그럴듯합니다. 맞는 값 3,500과 절반 차이인데 검산하지 않으면 그대로 나갑니다. #VALUE!와 32억은 차라리 눈에 띄는 축입니다.

왜 그렇게 되나

$가 없는 주소는 「몇 칸 떨어진 자리」로 기억됩니다. 복사하면 그 거리가 유지되도록 주소가 다시 쓰입니다. E4에 있던 =D4*D1은 「내 왼쪽 한 칸 × 내 위쪽 세 칸의 왼쪽 한 칸」이고, 이 수식이 E5로 가면 각각 한 줄씩 내려가 =D5*D2가 됩니다.

공급가 =B4*C4가 복사되어도 문제가 없던 것은, 그 수식이 가리키는 칸들이 줄마다 같이 내려가야 맞기 때문입니다. 세율처럼 표 어디에서 봐도 한 칸만 봐야 하는 값이 문제입니다. 열 문자나 행 번호 앞에 $를 붙이면 그 부분은 복사해도 따라 움직이지 않습니다.

$D$1 · $D1 · D$1 을 결과 값으로 비교

C1:E3 아홉 칸에 서로 다른 값을 넣고, 그중 D1을 기준 칸으로 삼았습니다. C1=100, D1=10, E1=1000 / C2=200, D2=20, E2=2000 / C3=300, D3=30, E3=3000. 값을 다 다르게 해 두면 복사된 수식이 어느 칸을 집었는지 숫자만 봐도 알 수 있습니다.

네 가지 수식을 각각 한 칸에 넣고, 그 칸을 포함해 가로 3칸 × 세로 3칸 범위로 복사했습니다.

네 가지 참조 방식을 3x3으로 복사한 결과 값과 각 칸에 남은 수식
네 가지 참조 방식을 3x3으로 복사한 결과 값과 각 칸에 남은 수식

`=D1` 상대참조 — 가로로도 세로로도 다 움직입니다. 오른쪽 끝 열은 값을 넣어 두지 않은 F1·F2·F3을 집어 0이 됐습니다.

1열2열3열
1행10 (=D1)1000 (=E1)0 (=F1)
2행20 (=D2)2000 (=E2)0 (=F2)
3행30 (=D3)3000 (=E3)0 (=F3)

`=$D$1` 절대참조 — 아홉 칸 전부 10입니다. 수식도 아홉 칸 모두 =$D$1 그대로입니다.

1열2열3열
1행101010
2행101010
3행101010

`=$D1` 혼합참조, 열만 고정 — 가로로 복사해도 D열에 붙어 있고, 세로로는 따라 내려갑니다.

1열2열3열
1행10 (=$D1)10 (=$D1)10 (=$D1)
2행20 (=$D2)20 (=$D2)20 (=$D2)
3행30 (=$D3)30 (=$D3)30 (=$D3)

`=D$1` 혼합참조, 행만 고정 — 세로로 복사해도 1행에 붙어 있고, 가로로는 따라 이동합니다.

1열2열3열
1행10 (=D$1)1000 (=E$1)0 (=F$1)
2행10 (=D$1)1000 (=E$1)0 (=F$1)
3행10 (=D$1)1000 (=E$1)0 (=F$1)

$는 자기 바로 뒤에 붙은 것만 붙듭니다. $D면 열, D$1$1이면 행입니다. 견적서처럼 위아래로만 복사하는 자리에서는 D$1$D$1과 같은 값을 냅니다. 행이 붙들려 있으니 아래로 내려가도 1행을 봅니다. 다만 나중에 그 열을 옆으로 한 칸 복사하면 E$1로 바뀌어 갈라집니다. 한 칸만 봐야 하는 값이면 $D$1으로 둘 다 붙드는 편이 뒤탈이 없습니다.

혼합참조가 절대참조보다 나은 자리

두 방향으로 동시에 채우는 표에서는 $D$1이 오히려 틀립니다. 수량을 세로 머리(A열), 단가를 가로 머리(1행)에 두고 가운데를 채우는 표를 만들어 봤습니다. 왼쪽 위 한 칸에 =$A2*B$1을 넣고 3칸 × 3칸으로 복사했습니다.

행 머리·열 머리를 곱하는 표와 각 칸의 수식
행 머리·열 머리를 곱하는 표와 각 칸의 수식
수량↓ / 단가→100020005000
11000 (=$A2*B$1)2000 (=$A2*C$1)5000 (=$A2*D$1)
55000 (=$A3*B$1)10000 (=$A3*C$1)25000 (=$A3*D$1)
1010000 (=$A4*B$1)20000 (=$A4*C$1)50000 (=$A4*D$1)

아홉 칸 모두 그 줄의 수량과 그 열의 단가를 곱한 값이 나왔습니다. $A2는 수량이 늘 A열에 있으니 열을 붙들고 행은 풀어 놓은 것이고, B$1은 단가가 늘 1행에 있으니 행을 붙들고 열은 풀어 놓은 것입니다.

같은 자리에 =A2*B1을 넣고 똑같이 복사하면 이렇게 됩니다.

2열3열4열
1행1000 (=A2*B1)2000000 (=B2*C1)10000000 (=C2*D1)
2행5000 (=A3*B2)10000000 (=B3*C2)50000000 (=C3*D2)
3행50000 (=A4*B3)100000000 (=B4*C3)500000000 (=C4*D3)

맞는 값이 나온 칸은 1000과 5000 두 개뿐입니다. =A3*B2가 5000이 된 것은 B2에 들어 있던 값(1×1000)이 마침 1000이어서 생긴 우연입니다. 나머지 일곱 칸은 두 참조 가운데 하나 이상이 머리글에서 표 안쪽 계산 결과로 옮겨 가 엉뚱한 값이 됐습니다.

$ 대신 이름을 붙이는 방법

기준 칸에 이름을 붙이는 방법도 있습니다. 이번 시험에서는 COM으로 이름 「부가세율」을 견적서!$D$1, 즉 절대참조로 등록했습니다.

=D4*부가세율

이 수식을 H4에 넣고 H5:H8로 복사한 결과입니다.

수식
H4=D4*부가세율2400
H5=D5*부가세율3500
H6=D6*부가세율1400
H7=D7*부가세율13600
H8=D8*부가세율7500

F열($D$1)과 같은 값입니다. 수식만 봐도 무엇을 곱하는지 읽히는 점이 낫습니다.

기준 칸을 옮기면 어떻게 되는지도 확인했습니다. 시트를 하나 더 만들어 B1에 0.1을 넣고 이름 「세율2」를 이름이동!$B$1로 등록한 뒤 =1000*세율2를 넣어 100을 받았습니다. 그다음 B1을 잘라내어 B10에 붙여넣었습니다.

이름이 가리키는 곳=1000*세율2
옮기기 전=이름이동!$B$1100
B1을 B10으로 옮긴 뒤=이름이동!$B$10100

이름이 따라 움직여 수식은 그대로 두고도 값이 유지됐습니다. 견적서를 계속 쓸 양식으로 만들 생각이면 이쪽을 권합니다.

복사한 뒤 확인하는 법

먼저 세 칸을 눌러 봅니다. 첫 줄, 가운데 한 줄, 마지막 줄을 눌러 수식 입력줄을 봅니다. 기준 칸 주소와 $ 표시가 세 군데 모두 같은지 확인합니다. 한 군데라도 다르면 그 사이에서 참조가 밀린 것입니다. 세 칸이 같다고 전체가 맞다는 보장은 없으니, 줄이 많으면 아래 FORMULATEXT 쪽으로 전부 펼쳐 보십시오.

한 화면에서 보려면 옆 칸에 FORMULATEXT를 넣습니다. 이 글의 그림에서 「수식」이라고 붙은 칸은 모두 이 함수로 뽑은 것입니다.

=FORMULATEXT(E4)

숫자로도 검산하십시오. 이번 견적서에서는 공급가 합계 284,000의 10%인 28,400이 세액 합계와 맞는지 보면 됩니다.

=SUM(D4:D8)*D1   → 28400
=SUM(F4:F8)      → 28400

두 값이 다르면 어딘가 어긋난 것입니다. 참조가 밀린 줄이 흔한 원인이고, 합계 범위가 잘못 잡혔을 수도 있습니다.

실패한 것

확인하지 않은 것

함께 보기