2017-03-07 116 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 
相关问题