본문 바로가기
#2 엑셀 오류 가이드

엑셀에서 2개 워크시트를 비교하는 방법

by 이세계의엑셀 2025. 9. 14.
반응형

글의 목적 : 이 글은 “두 개의 워크시트 또는 통합문서 간에 무엇이 다른가”를 빠르게 찾아내는 표준 절차와 실무용 수식, 조건부 서식, 파워쿼리, 추가 기능, VBA까지 단계별로 정리하여 상황별 최적 비교법을 선택하도록 돕기 위한 것이다.

비교 전에 반드시 준비할 것

  • 비교 범위 정의 : 전체 시트인지, 특정 열/행인지 범위를 확정한다.
  • 기준키 설정 : 거래번호, 품목코드, 사번 등 유일키가 있어야 정확히 매칭된다.
  • 정규화 : 공백·특수문자·대소문자·형식 차이를 먼저 정리한다.
    • 문자 공백 제거: =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. 창을 나란히 띄워 빠르게 비교하다

  1. 보기 → 새 창을 눌러 동일 통합문서를 두 창으로 연다.
  2. 보기 → 모든 창 정리 → 나란히 보기를 선택한다.
  3. 동시 스크롤을 켠다. 스크롤 위치를 일치시켜 육안으로 확인한다.

초기 탐색 단계에서 차이의 구역을 파악할 때 유효하다.

방법 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. 파워쿼리로 풀 아우터 조인 비교하다

  1. 두 시트를 각각 데이터 → 데이터 가져오기 → 테이블/범위에서로 불러온다.
  2. 홈 → 쿼리 병합에서 풀 아우터를 선택하고 키 열을 지정한다.
  3. 오른쪽 테이블 열을 확장하여 값 열을 나란히 둔다.
  4. 사용자 지정 열을 추가하여 차이 플래그를 만든다.
    // 예시 M 코드(간단화)
    = Table.AddColumn(이전단계, "변경여부", each if [값_좌] = [값_우] then "일치" else "변경")
    
  5. 닫기 및 로드로 결과를 시트에 배치한다.

원본이 갱신되면 모두 새로 고침만으로 재비교가 가능하다.

반응형

방법 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을 우선 사용하고, 대용량은 파워쿼리로 병합한다. 매크로 사용 시 ScreenUpdatingCalculation을 제어한다.

Q5. 수식까지 동일한지 확인하려면

셀의 .Formula2 속성 비교 또는 Spreadsheet Compare를 사용한다.

참고 자료

문서/항목 설명 출처
XLOOKUP 함수 키 기반 검색과 누락 처리 Microsoft Support
조건부 서식 규칙 수식 규칙 작성과 적용 범위 Microsoft Support
Power Query 병합 조인 종류와 결과 확장 Microsoft Learn
Spreadsheet Compare 통합문서 버전 비교 기능 Microsoft Support
Inquire 추가 기능 Workbook Analysis, Compare Files Microsoft Support

 

반응형