비교 전에 반드시 준비할 것
- 비교 범위 정의 : 전체 시트인지, 특정 열/행인지 범위를 확정한다.
- 기준키 설정 : 거래번호, 품목코드, 사번 등 유일키가 있어야 정확히 매칭된다.
- 정규화 : 공백·특수문자·대소문자·형식 차이를 먼저 정리한다.
- 문자 공백 제거:
=TRIM(SUBSTITUTE(A2,CHAR(160),""))
사용이 권장된다. - 숫자 강제 변환:
=--A2
또는=VALUE(A2)
를 사용한다. - 날짜 변환 확인: 셀 서식을
yyyy-mm-dd
로 통일한다.
- 문자 공백 제거:
- 테이블 개체 권장 : 두 범위를 표(삽입 → 표)로 변환하면 열 이름 기반 수식이 명확해진다.
방법 개요: 무엇을 언제 쓸까
상황 | 권장 방법 | 핵심 기능/수식 | 장점 | 주의점 |
---|---|---|---|---|
빠른 육안 비교 | 나란히 보기 | 보기 → 새 창 + 나란히 보기 + 동기화 스크롤 | 준비시간 거의 없음 | 대량 차이는 놓치기 쉽다 |
존재 여부 확인 | 조건부 서식 | COUNTIF , COUNTIFS |
시각적 식별이 빠르다 | 규칙 범위와 참조 고정이 중요하다 |
셀 단위 완전 일치 비교 | 수식/조건부 서식 | =A1<>Sheet2!A1 , SUMPRODUCT |
정량화 가능 | 범위가 같아야 한다 |
키 기반 속성 값 비교 | XLOOKUP/MATCH | XLOOKUP , XMATCH , FILTER |
실무 최다 케이스 | 키 중복·누락을 먼저 점검한다 |
대용량·감사용 | 파워쿼리 병합 | 풀 아우터 조인, 차이 플래그 | 재실행·기록성 우수 | 초기 설정 시간이 필요하다 |
버전 간 구조·수식 비교 | Spreadsheet Compare / Inquire | 파일 비교, 링크·수식 변경 탐지 | 구조 변화 파악에 특화 | 에디션 제한, Mac 미지원인 경우가 있다 |
완전 자동화 | VBA 매크로 | 셀 루프, 차이 색칠, 로그 | 반복 업무 자동화 | 보안 정책과 서명 요구 가능 |
방법 1. 창을 나란히 띄워 빠르게 비교하다
- 보기 → 새 창을 눌러 동일 통합문서를 두 창으로 연다.
- 보기 → 모든 창 정리 → 나란히 보기를 선택한다.
- 동시 스크롤을 켠다. 스크롤 위치를 일치시켜 육안으로 확인한다.
초기 탐색 단계에서 차이의 구역을 파악할 때 유효하다.
방법 2. 조건부 서식으로 존재·불일치 하이라이트하다
2-1. 목록 존재 여부 비교
Sheet1의 A2:A100
을 선택하고 홈 → 조건부 서식 → 수식을 사용하여 규칙 만들기에서 아래 수식을 사용한다.
=COUNTIF(Sheet2!$A:$A, A2)=0
Sheet2에 없는 값만 강조된다.
2-2. 다중 조건으로 행 일치 검증
키열이 A
, 금액이 B
라면 다음과 같이 사용한다.
=COUNTIFS(Sheet2!$A:$A,$A2, Sheet2!$B:$B,$B2)=0
동일 키의 금액이 다르면 강조된다.
2-3. 셀 대 셀 비교를 조건부 서식으로 표시
Sheet1의 비교 범위 A1:D200
을 선택하고 규칙 수식으로 아래를 사용한다.
=A1<>Sheet2!A1
다른 셀만 색칠되어 즉시 차이를 확인할 수 있다.
방법 3. 수식으로 셀 단위 차이를 집계하다
3-1. 간단 표기
=IF(Sheet1!B2=Sheet2!B2,"=","≠")
3-2. 대소문자 구분 비교
=EXACT(Sheet1!B2, Sheet2!B2)
3-3. 범위 전체 차이 개수
=SUMPRODUCT(--(Sheet1!A1:D200<>Sheet2!A1:D200))
반환 값이 0이면 완전 일치이다.
3-4. 행 단위로 어느 열이 다른지 표시
=TEXTJOIN(", ",TRUE, IF(Sheet1!B2:E2<>Sheet2!B2:E2, Sheet1!$B$1:$E$1,""))
Ctrl
+
Shift
+
Enter
가 필요한 구버전에서는 배열 수식으로 확정한다.
방법 4. 키 기반 비교: XLOOKUP으로 “값이 바뀐 행”만 뽑다
4-1. 존재하지 않는 키 찾기
=FILTER(Sheet1!A2:D100, ISNA(XMATCH(Sheet1!A2:A100, Sheet2!A2:A100, 0)))
Sheet2에 없는 키의 행만 반환한다.
4-2. 키는 같고 값만 달라진 행 찾기
키가 A
열, 비교 값이 B
열일 때 다음과 같이 사용한다.
=FILTER(Sheet1!A2:D100, Sheet1!B2:B100<>XLOOKUP(Sheet1!A2:A100, Sheet2!A2:A100, Sheet2!B2:B100, ""))
4-3. 여러 열 동시 검증
=FILTER(Sheet1!A2:D100,
(Sheet1!B2:B100<>XLOOKUP(Sheet1!A2:A100,Sheet2!A2:A100,Sheet2!B2:B100,""))+
(Sheet1!C2:C100<>XLOOKUP(Sheet1!A2:A100,Sheet2!A2:A100,Sheet2!C2:C100,""))+
(Sheet1!D2:D100<>XLOOKUP(Sheet1!A2:A100,Sheet2!A2:A100,Sheet2!D2:D100,"")) > 0 )
방법 5. 동적 배열로 “차이 보고서” 만들다
5-1. 변경 전·후를 하나의 표로 정리
=LET(
key, Sheet1!A2:A100,
v1, Sheet1!B2:B100,
v2, XLOOKUP(key, Sheet2!A2:A100, Sheet2!B2:B100,""),
diff, v1<>v2,
HSTACK( {"키","이전값","현재값","변경여부"},
VSTACK(
{"","", "", ""},
HSTACK(key, v1, v2, IF(diff,"변경","일치"))
)))
머리글과 본문을 한 번에 생성하여 보고서로 사용한다.
방법 6. 파워쿼리로 풀 아우터 조인 비교하다
- 두 시트를 각각 데이터 → 데이터 가져오기 → 테이블/범위에서로 불러온다.
- 홈 → 쿼리 병합에서 풀 아우터를 선택하고 키 열을 지정한다.
- 오른쪽 테이블 열을 확장하여 값 열을 나란히 둔다.
- 사용자 지정 열을 추가하여 차이 플래그를 만든다.
// 예시 M 코드(간단화) = Table.AddColumn(이전단계, "변경여부", each if [값_좌] = [값_우] then "일치" else "변경")
- 닫기 및 로드로 결과를 시트에 배치한다.
원본이 갱신되면 모두 새로 고침만으로 재비교가 가능하다.
방법 7. Spreadsheet Compare 및 Inquire 추가 기능 활용하다
- Spreadsheet Compare : Office 구성 요소로 파일 간 수식·이름 정의·서식·VBA 변경을 시각적으로 비교한다.
- Inquire 추가 기능 : Excel 리본에 Inquire 탭을 표시하고 Workbook Analysis, Compare Files 기능을 제공한다.
엔터프라이즈 구독과 Windows 에디션에서 사용 가능하며 Mac 환경에서는 지원되지 않는 경우가 있다.
방법 8. VBA로 대용량 비교를 자동화하다
두 시트의 사용 영역을 비교하여 차이 셀을 색칠하고 로그 시트를 만드는 예제이다.
Option Explicit
Sub CompareTwoSheets()
Dim ws1 As Worksheet, ws2 As Worksheet, logS As Worksheet
Dim r As Long, c As Long, maxR As Long, maxC As Long
Dim v1 As Variant, v2 As Variant
```
Set ws1 = ThisWorkbook.Worksheets("Sheet1") '원본
Set ws2 = ThisWorkbook.Worksheets("Sheet2") '대상
On Error Resume Next
Set logS = ThisWorkbook.Worksheets("DiffLog")
On Error GoTo 0
If logS Is Nothing Then
Set logS = ThisWorkbook.Worksheets.Add
logS.Name = "DiffLog"
Else
logS.Cells.Clear
End If
logS.Range("A1:D1").Value = Array("행","열","값_Sheet1","값_Sheet2")
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
maxR = Application.WorksheetFunction.Max(ws1.UsedRange.Rows.Count, ws2.UsedRange.Rows.Count)
maxC = Application.WorksheetFunction.Max(ws1.UsedRange.Columns.Count, ws2.UsedRange.Columns.Count)
For r = 1 To maxR
For c = 1 To maxC
v1 = ws1.Cells(r, c).Value2
v2 = ws2.Cells(r, c).Value2
If CStr(v1) <> CStr(v2) Then
ws1.Cells(r, c).Interior.Color = RGB(255, 235, 156) '노랑
ws2.Cells(r, c).Interior.Color = RGB(255, 199, 206) '연분홍
With logS
.Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(1, 4).Value = Array(r, c, v1, v2)
End With
End If
Next c
Next r
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox "비교 완료", vbInformation
```
End Sub
형식·수식 비교까지 필요하면 .Formula2
또는 .NumberFormat
을 함께 비교한다.
숫자·날짜 비교 시 오차 처리 요령
- 반올림 허용 :
=ABS(Sheet1!B2 - Sheet2!B2) < 0.01
과 같이 허용오차를 둔다. - 시간 비교 :
=INT(날짜)
로 날짜만 비교하거나=MOD(시간,1/24)
로 시간차만 비교한다. - 텍스트형 숫자 :
=VALUE(텍스트)
로 정규화 후 비교한다.
실무 예시
예시 1. 재고 마스터 변경 추적
키(품목코드) | 이전 단가 | 현재 단가 | 변경 여부 |
---|---|---|---|
P001 | 1200 | 1200 | 일치 |
P002 | 980 | 1020 | 변경 |
P003 | — | 1500 | 신규 |
보고서 수식 예시이다.
=LET(k,Sheet1[품목코드],
old,Sheet1[단가],
new,XLOOKUP(k,Sheet2[품목코드],Sheet2[단가],""),
status, IF(old="", "신규", IF(new="", "삭제", IF(old=new,"일치","변경"))),
HSTACK(k, old, new, status))
예시 2. 두 시트의 열 머리글이 바뀌었는지 검사
=TEXTJOIN(", ",TRUE, IF(Sheet1!1:1<>Sheet2!1:1, Sheet1!1:1 & "→" & Sheet2!1:1, ""))
머리글명이 바뀐 열만 나열된다.
자주 쓰는 비교 수식 모음
목적 | 수식 | 메모 |
---|---|---|
범위 일치 여부 카운트 | =SUMPRODUCT(--(Rng1<>Rng2)) |
0이면 완전 일치이다 |
존재하지 않는 키 | =FILTER(T1, ISNA(XMATCH(T1[키], T2[키],0))) |
왼쪽 전용 행 추출이다 |
값 변경 행 | =FILTER(T1, T1[값]<>XLOOKUP(T1[키],T2[키],T2[값],"")) |
키 매칭 후 값 비교이다 |
대소문자 구분 비교 | =EXACT(T1[@열], XLOOKUP(T1[@키],T2[키],T2[열],"")) |
TRUE/ FALSE 반환이다 |
허용오차 비교 | =ABS(T1[@금액]-XLOOKUP(T1[@키],T2[키],T2[금액],0))<=0.01 |
소수 오차 허용이다 |
체크리스트
- 두 범위 크기와 시작 셀 좌표가 같은가 확인한다.
- 키 중복 여부를
=COUNTIF(키범위, 키값)
으로 점검한다. - 숫자·날짜·텍스트 형식이 일치하는가 확인한다.
- 숨김열·필터 적용 상태를 해제하고 비교한다.
- 필요 시 결과를 별도 시트에 고정값으로 복사하여 기록한다.
자주 묻는 질문(FAQ)
Q1. 통합문서가 다른 파일이어도 비교가 가능한가
가능하다. 수식에서 다른 통합문서를 3D 참조하거나 XLOOKUP의 배열 인수에 외부 책갈피를 넣으면 된다. 두 파일을 모두 열어두면 계산 속도가 안정적이다.
Q2. 대소문자 차이는 무시하고 비교하려면 어떻게 하나
기본 비교는 대소문자를 구분하지 않는다. 대소문자를 구분해야 할 때만 EXACT
를 사용한다.
Q3. 공백이나 보이지 않는 문자 때문에 다르게 인식된다
=TRIM(SUBSTITUTE(셀,CHAR(160),""))
로 정리한 보조열을 만든 뒤 비교한다.
Q4. 속도가 느리다
동적 배열과 XLOOKUP을 우선 사용하고, 대용량은 파워쿼리로 병합한다. 매크로 사용 시 ScreenUpdating
과 Calculation
을 제어한다.
Q5. 수식까지 동일한지 확인하려면
셀의 .Formula2
속성 비교 또는 Spreadsheet Compare를 사용한다.
참고 자료
문서/항목 | 설명 | 출처 |
---|---|---|
XLOOKUP 함수 | 키 기반 검색과 누락 처리 | Microsoft Support |
조건부 서식 규칙 | 수식 규칙 작성과 적용 범위 | Microsoft Support |
Power Query 병합 | 조인 종류와 결과 확장 | Microsoft Learn |
Spreadsheet Compare | 통합문서 버전 비교 기능 | Microsoft Support |
Inquire 추가 기능 | Workbook Analysis, Compare Files | Microsoft Support |
'#2 엑셀 오류 가이드' 카테고리의 다른 글
엑셀에서 3차원 참조로 여러 시트 데이터 합계하기 (0) | 2025.09.14 |
---|---|
엑셀에서 여러 시트를 한꺼번에 편집하기 (시트 그룹 편집) (0) | 2025.09.13 |
엑셀에서 고급 필터 사용법 및 오류 대처 (1) | 2025.07.22 |
엑셀에서 조건에 맞는 데이터만 추출하기 (필터/함수) (0) | 2025.07.21 |
엑셀에서 중복 데이터 개수 세는 방법 (1) | 2025.07.20 |