2013-12-11 2 views
-1

비교 도구로 사용할 수있는 통합 문서 내에서 매크로를 만들고 싶습니다.매크로 두 워크 시트를 비교하고 변경이 발생한 부분을 강조 표시합니다.

기록 데이터가 워크 시트 1 '기록'에 추가됩니다. 그러면 현재 데이터가 워크 시트 2 '신규'에 추가됩니다. 데이터는 정확히 같은 형식입니다.

매크로는 워크 시트 1 (키 식별자)의 열 G와 상태 (O 상태)를 보여야합니다. 이 데이터는 워크 시트 2의 열 G와 O와 비교되어야합니다.

열 G가 일치하지만 열 O가 변경된 경우 Worksheet 2 'New'의 전체 행이 Worksheet 3에 붙여 넣어 져야합니다. '결과 '.

예;

워크 시트 1 '역사'- 열 G, 123456789 및 열 O, 유효하지

워크 시트 2 '새'-

유효한 열 G, 123456789 및 열 O 열에서 일치가 존재하므로 G 상태가 변경되었지만 워크 시트 2의 행이 워크 시트 3의 다음 사용 가능한 행에 붙여 넣기됩니다. '결과'

도움이 될만한 점이 있으면 큰 도움이 될 것입니다. 나는 Vlookup과 Countif를 매크로에 추가하지 않고 놀았습니다.

+0

열 G의 ID가 항상 중복되거나 항상 고유 한 값입니까? – DaveU

+0

안녕 Dave, 특정 계정에 둘 이상의 레코드가있는 경우 G에서 ID가 중복되는 경우가 있습니다. 이는 드문 일이지만 발생할 수 있습니다. 감사합니다 – HayleyW

+0

저는이 공식을 별도의 시트에 사용하고 있습니다. = IF (New! O2 = VLOOKUP (New! G2, Historical! $ G $ 2 : $ O $ 1000,9,0), "", "CHANGED") – HayleyW

답변

1

아이디어가 도움이되기를 바랍니다.

Sub matchMe() 
    Dim wS As Worksheet, wT As Worksheet 
    Dim r1 As Range, r2 As Range 
    Dim cel1 As Range, cel2 As Range 

    Set wS = ThisWorkbook.Worksheets("Sheet1") 
    Set wT = ThisWorkbook.Worksheets("Sheet2") 

    With wS 
     Set r1 = .Range("G1", .Cells(.Rows.Count, .Columns("G:G").Column).End(xlUp)) 
    End With 

    With wT 
     Set r2 = .Range("G1", .Cells(.Rows.Count, .Columns("G:G").Column).End(xlUp)) 
    End With 

    On Error Resume Next 
    For Each cel1 In r1 
     With Application 
      Set cel2 = .Index(r2, .Match(cel1.Value, r2, 0)) 'find match in sheet2 
      If Err = 0 Then 
       If cel1.Offset(, 8) <> cel2.Offset(, 8) Then copyRow cel2 'if difference, copy 
      End If 
      Err.Clear 
     End With 
    Next cel1 
End Sub 

Sub copyRow(cel As Range) 
    Dim w As Worksheet, r As Range 
    Set w = ThisWorkbook.Worksheets("Sheet3") 
    Set r = w.Cells(w.Rows.Count, Columns("G:G").Column).End(xlUp).Offset(1) 'next row 
    cel.EntireRow.Copy w.Cells(r.Row, 1) 
End Sub 
+0

감사합니다. DaveU, 완벽하게 작동했습니다. – HayleyW

관련 문제