2017-03-07 124 views
1

我試圖匹配來自2個不同的工作表和來自2個不同的工作簿的名稱數據。而且我已經創建了宏vba。但是當數據的順序相同時,這個宏是用於數據類型的,如果數據的順序不一樣?名稱數據匹配數據不同的工作簿和不同的順序

In first workbook 

Name 
Andre 
Renata 
Marie 

In second workbook 

Name 
Andre 
Marie 
Renata 

例如用我的宏結果對以上數據不匹配。但是我想要以上數據的結果是MATCH。

,這是我的宏VBA

Sub matchdata_Click() 
    Dim rng1 As Range, rng2 As Range 
    Dim iRow As Long 
    Dim diffs As String 

     With Workbooks("A.xls").Worksheets("1") 
     Set rng1 = .Range("A1", .Cells(.Rows.Count, "A").End(xlUp)) 
    End With 

    With Workbooks("B.xlsx").Worksheets("1") 
     Set rng2 = .Range("M3", .Cells(.Rows.Count, "M").End(xlUp)) 
    End With 

    For iRow = 1 To WorksheetFunction.Max(rng1.Rows.Count, rng2.Rows.Count) 
     If rng1(iRow) <> rng2(iRow) Then diffs = diffs & iRow & vbLf 
    Next 

    If diffs <> "" Then 
     MsgBox "Different name in rows:" & vbCrLf & vbCrLf & diffs 
    Else 
     MsgBox "All names match" 
    End If 

請幫助我,如果你知道如何做到這一點

+0

爲什麼不從兩個範圍排序開始? – SJR

+0

是否要檢查同一行中的兩張紙上是否有相同的名稱,或者第二張紙上是否存在第一張紙的名稱? – tretom

+0

@tretom我想檢查一下,我設置的那個範圍內的兩張表是否有相同的名稱,即使順序不一樣,就像我的示例 – User1994

回答

0

沒有範圍(與細胞的座標小可能的解決方案可根據被改變您的需求):

Option Explicit 
Sub check() 
    Dim i As Integer, j As Integer 
    Dim found As Boolean 

    i = 1 
    While Workbooks("A.xls").Sheets(1).Cells(i, 1).Value <> "" 
     j = 1 
     found = False 
     While Workbooks("B.xls").Sheets(2).Cells(j, 13).Value <> "" 

      If Workbooks("A.xls").Sheets(1).Cells(i, 1).Value = Workbooks("B.xls").Sheets(2).Cells(j, 13).Value Then found = True 

      j = j + 1 
     Wend 

     If found = False Then 
      Workbooks("A.xls").Sheets(1).Cells(i, 1).Interior.ColorIndex = 3 
     End If 
     i = i + 1 
    Wend 
End Sub 
相關問題