본문 바로가기
업무 자동화

엑셀 VBA로 두 시트 비교하여 차이점만 자동 추출하기

by jungdabnote 2026. 3. 6.
반응형

엑셀 데이터 비교 노가다 끝, 버튼 하나로 업데이트된 내역만 골라내는 매크로

실무에서 가장 번거로운 작업 중 하나는 지난달 데이터와 이번 달 데이터를 대조하여 무엇이 바뀌었는지 찾아내는 일입니다. 제품 단가가 얼마나 변했는지, 수량에 오차가 생기지는 않았는지 수천 줄의 행을 눈으로 비교하다 보면 실수가 생기기 마련입니다. 오늘은 클릭 한 번으로 두 시트를 비교해 값이 바뀐 셀만 찾아내어 별도의 보고서로 만들어주는 매크로를 소개합니다.

1. 데이터 비교 자동화가 필요한 이유

비교 작업의 핵심은 누락 없는 정확성입니다. 특히 원가 관리나 자산 관리처럼 숫자가 예민한 직무에서는 단 1원의 차이도 큰 오류로 이어질 수 있습니다. VBA 매크로를 사용하면 사람이 놓치기 쉬운 미세한 오타나 소수점 차이까지 완벽하게 잡아낼 수 있으며, 비교 결과를 별도의 시트에 정리해 주므로 보고서 작성 시간까지 획기적으로 줄여줍니다.

2. 두 시트 비교 및 변동 내역 추출 VBA 코드

이 코드는 원본 시트와 비교 시트의 동일한 위치를 대조하여 값이 다른 경우에만 해당 행 전체를 새로운 결과 시트로 옮겨줍니다.

먼저 알트와 F11 키를 눌러 편집기를 열고 아래 코드를 모듈에 복사해 보세요.

Sub GenerateDiffReport()
    Dim wsOld As Worksheet, wsNew As Worksheet, wsResult As Worksheet
    Dim i As Long, j As Long, nextRow As Long
    Dim lastRow As Long, lastCol As Long
    
    ' 1. 비교할 시트들을 지정합니다.
    Set wsOld = ThisWorkbook.Sheets("이전데이터")
    Set wsNew = ThisWorkbook.Sheets("현재데이터")
    
    ' 2. 결과가 담길 시트를 새로 만듭니다.
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("변동내역보고서").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0
    
    Set wsResult = Sheets.Add(After:=Sheets(Sheets.Count))
    wsResult.Name = "변동내역보고서"
    
    ' 3. 제목 행을 복사합니다.
    wsNew.Rows(1).Copy Destination:=wsResult.Rows(1)
    nextRow = 2
    
    ' 4. 데이터 범위를 확인합니다.
    lastRow = wsNew.Cells(wsNew.Rows.Count, "A").End(xlUp).Row
    lastCol = wsNew.Cells(1, wsNew.Columns.Count).End(xlToLeft).Column
    
    Application.ScreenUpdating = False
    
    ' 5. 반복문을 돌며 값이 다른 행을 찾아 결과 시트에 복사합니다.
    For i = 2 To lastRow
        For j = 1 To lastCol
            If wsOld.Cells(i, j).Value <> wsNew.Cells(i, j).Value Then
                wsNew.Rows(i).Copy Destination:=wsResult.Rows(nextRow)
                ' 바뀐 셀에만 연두색 배경을 칠해 강조합니다.
                wsResult.Cells(nextRow, j).Interior.Color = RGB(204, 255, 204)
                nextRow = nextRow + 1
                Exit For ' 한 행에 하나라도 다르면 다음 행으로 넘어갑니다.
            End If
        Next j
    Next i
    
    Application.ScreenUpdating = True
    MsgBox "변동 내역 추출이 완료되었습니다. 결과 시트를 확인하세요."
End Sub

3. 실무 활용 팁

첫 번째로 시트 이름 맞추기입니다. 위 코드를 사용하기 전 비교하고 싶은 두 시트의 이름을 각각 이전데이터와 현재데이터로 바꾸면 즉시 작동합니다. 만약 시트 이름이 매번 바뀐다면 코드 초반의 시트 이름 부분을 수정하여 유연하게 대처할 수 있습니다.

두 번째로 색상 강조 활용입니다. 위 매크로는 단순히 행을 복사하는 것에 그치지 않고, 어떤 값이 바뀌었는지 해당 셀에 색상을 칠해줍니다. 이를 통해 수백 개의 열 중에서 정확히 어떤 수치가 업데이트되었는지 한눈에 파악할 수 있어 의사결정 속도가 매우 빨라집니다.

4. 마치며

기록된 데이터의 변화를 읽어내는 것이 관리자의 역할입니다. 오늘 배온 비교 매크로를 통해 단순 반복 작업의 피로도에서 벗어나, 왜 그 수치가 변했는지 분석하는 더 가치 있는 일에 시간을 투자해 보시기 바랍니다. 정확한 비교가 데이터 분석의 시작입니다.



반응형