2014-01-31 9 views
-2

첫 번째 열 값을 기준으로 "마스터"워크 시트와 "새"워크 시트를 비교하고 싶습니다. "New"워크 시트에서 같은 것을 사용할 수 있으면 "Master"워크 시트의 일치하는 행의 "E"열과 "New"워크 시트의 일치하는 행의 "E"열을 비교하려고합니다. 값에 diffenrence가있는 경우 "master"의 열 값 "E"를 "New"의 열 값 "E"로 바꾸고 전체 행을 색상으로 강조 표시합니다. "비교하고 vba 매크로의 열 값을 바꿉니다

시트 경우 :

Sub CompareValues() 
Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet, lr As Long, rng As Range, c As Range 
Set sh1 = Sheets("New") 
Set sh2 = Sheets("Master") 
lr = sh2.Cells(Rows.Count, 1).End(xlUp).Row 'Get last row with data in Column A on Sheet 1. 
Set rng = sh2.Range("A2:A" & lr) 'Set compare range to a variable 
For Each c In rng 'Make cell by cell comparison 
    If Application.CountIf(sh1.Range("A:A"), c.Value) <> 0 Then 
     If c.EntireRow.Range("E") <> sh1.Range("E", c.Value) Then 
      ' to fill the value into another sheet simply replace from sh1 to c.Range     
      c.Range("E" & i).Copy (sh1.Range("E" & i)) 
      Range(c, sh2.Cells(c.Row, Columns.Count).End(xlToLeft)).Interior.ColorIndex = 4 
     End If 
    End If 
Next 
End Sub 

답변

0

. 당신의 도움을 주셔서 감사합니다.

Sub UpdateSheet() 
Dim masterSheet As Excel.Worksheet, newSheet As Excel.Worksheet 
Dim e, n, masterCell As Excel.Range, newCell As Excel.Range 
Dim columnOffset As Integer 

Const idColumn = 1 'column A has index 1 
Const newDataColumn = 5 'column E has index 5 
columnOffset = newDataColumn - idColumn 'offset between those columns is 4 

Set masterSheet = ThisWorkbook.Sheets("Master") 
Set newSheet = ThisWorkbook.Sheets("New") 

'iterate over all cells of the first column in the used range of this worksheet 
For Each e In masterSheet.UsedRange.Columns(idColumn).Cells 
    Set masterCell = e 
    If masterCell.Value <> Empty Then 
     For Each n In newSheet.UsedRange.Columns(idColumn).Cells 
      Set newCell = n 

      'if the cell on the master sheet is not empty and the values of both cells match 
      If masterCell.Value = newCell.Value Then 
       'select cells in column "E" 
       Set masterCell = masterCell.Offset(0, columnOffset) 
       Set newCell = newCell.Offset(0, columnOffset) 

       'copy values and paint row if values don't match 
       If masterCell.Value <> newCell.Value Then 
        masterCell.Value = newCell.Value 
        masterCell.EntireRow.Interior.ColorIndex = 4 
       End If 
      End If 
     Next n 
    End If 
Next e 

End Sub 
0

불행하게도, 난

은 (세 번째 열은 열 'E' 것이다 가정 )를 명확히하기 위해 ...이 질문에 (또는 포스트 사진)에 대해 언급 할 수 없습니다 마스터 "는 다음과 같습니다

| first | info | d'oh | 
| two | info | 4 | 
| three | info | hello | 

와"새로운 "그 다음과 같습니다

| first | info | d'oh | 
| two | blub | 5 | 
| wheee | cool | cool | 

당신이 원하는 결과 :

| first | info | d'oh | 
| two | info | 5 | <- highlighted 
| three | info | hello | 

내 솔루션 :

내 요구 사항에 맞게 솔루션을 업데이트
Sub UpdateSheet() 
    Dim masterSheet As Excel.Worksheet, newSheet As Excel.Worksheet 
    Dim e, masterCell As Excel.Range, newCell As Excel.Range 
    Dim columnOffset As Integer 

    Const idColumn = 1 'column A has index 1 
    Const newDataColumn = 5 'column E has index 5 
    columnOffset = newDataColumn - idColumn 'offset between those columns is 4 

    Set masterSheet = ThisWorkbook.Sheets("Master") 
    Set newSheet = ThisWorkbook.Sheets("New") 

    'iterate over all cells of the first column in the used range of this worksheet 
    For Each e In masterSheet.UsedRange.Columns(idColumn).Cells 
     Set masterCell = e 
     Set newCell = newSheet.Cells(masterCell.Row, idColumn) 

     'if the cell on the master sheet is not empty and the values of both cells match 
     If masterCell.Value <> Empty And masterCell.Value = newCell.Value Then 
      'select cells in column "E" 
      Set masterCell = masterCell.Offset(0, columnOffset) 
      Set newCell = newCell.Offset(0, columnOffset) 

      'copy values and paint row if values don't match 
      If masterCell.Value <> newCell.Value Then 
       masterCell.Value = newCell.Value 
       masterCell.EntireRow.Interior.ColorIndex = 4 
      End If 
     End If 
    Next e 

End Sub 
+0

안녕하세요. marcw, 죄송합니다. 귀하의 의견을 보내 주셔서 감사합니다. 귀하의 솔루션을 시도하고 그것은 마스터 시트의 첫 번째 열의 데이터가 새로운 시트의 동일한 행 번호의 데이터와 일치하면 잘 작동합니다. 그러나 나는 그것을 새로운 시트에서 찾아서 그것을 마스터 시트에서 업데이트해야합니다. – user1907867

관련 문제