2017-05-03 74 views
0

目标:比较两个Excel表格和拉重复数据

  1. 搜索&比较两个字段列E(表2)〜E栏(表1)从表2 返回重复值来表3
  2. 显示和突出显示重复的表1和2
  3. 复制重复从表2项 光值,然后添加到表3

如果列E(表2)=列E(表1),然后从(表2)复制行并添加到表3

我想比较工作簿中的两个Excel表。我想在表2和1之间找到重复的值,并在两张表上突出显示这些值。我知道这是一个匹配或vlookup函数,但增加的层是我想复制这些值只从表2到表3进行视觉比较。我试图创建一个宏,但这没有帮助,我正在尝试编辑这个过程;

Sub rowContent() 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 
    Dim i As Long, j As Long 
    Dim isMatch As Boolean 
    Dim newSheetPos As Integer 

Set ws1 = ActiveWorkbook.Sheets("Sheet1") 
Set ws2 = ActiveWorkbook.Sheets("Sheet2") 

'Initial position of first element in sheet2 
newSheetPos = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row 

For i = 1 To ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row 
    isMatch = False 
    For j = 1 To ws1.Cells(ws1.Rows.Count, 2).End(xlUp).Row 
     If ws1.Cells(i, 1).Value = ws1.Cells(j, 2).Value Then 
      ws1.Cells(j, 2).EntireRow.Copy ws2.Cells(newSheetPos, 1) 
      isMatch = True 
      newSheetPos = newSheetPos + 1 
     End If 
    Next j 
    If isMatch = False Then newSheetPos = newSheetPos + 1 
Next i 
End Sub 

为我的情况工作。任何帮助将不胜感激,因为我不是Excel大师。

+0

代码不是很有用吗?它是否运行,但不能按预期工作?它会抛出一个错误(如果是这样,什么错误/在哪里)?另外,当两张纸上的“E1”都一样时,它是否重复?或者Sheet1,Col.E中的值可以在Sheet2列E中的任何位置? – BruceWayne

+0

可能的重复[如何删除两个Excel表格之间的重复快速vba](http://stackoverflow.com/questions/13665305/how-do-i-delete-duplicates-between-two-excel-sheets-quickly- vba) – Masoud

+0

对不起,我认为是写了那句话错了。列出的脚本没有错。我尝试创建的宏有问题。列出的脚本是我目前正在尝试重新设计以适应我的具体情况。 该脚本比较一张纸上的两列并将数据提取到另一张纸上。这不是我想要做的。我正在尝试为另一张纸上的一张纸上的信息执行VLOOKUP以查找重复值,然后从该行中将该数据提取到第三张纸上 – Neil

回答

0

你可以试试这样的事情...

Sub CopyDuplicates() 
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet 
Dim lr1 As Long, lr2 As Long, lc1 As Long, lc2 As Long, r As Long 
Dim rng As Range, cell As Range 
Application.ScreenUpdating = False 

Set ws1 = Sheets("Sheet1") 
Set ws2 = Sheets("Sheet2") 
Set ws3 = Sheets("Sheet3") 

ws3.Cells.Clear 
lr2 = ws2.UsedRange.Rows.Count 
lc1 = ws1.UsedRange.Columns.Count 
lc2 = ws2.UsedRange.Columns.Count 

ws1.UsedRange.Interior.ColorIndex = xlNone 
ws2.UsedRange.Interior.ColorIndex = xlNone 

Set rng = ws2.Range("E1:E" & lr2) 
For Each cell In rng 
    If Application.CountIf(ws1.Range("E:E"), cell.Value) > 0 Then 
     r = Application.Match(cell.Value, ws1.Range("E:E"), 0) 
     ws1.Range(ws1.Cells(r, 1), ws1.Cells(r, lc1)).Interior.Color = vbRed 
     ws2.Range(ws2.Cells(r, 1), ws2.Cells(r, lc2)).Interior.Color = vbRed 
     cell.EntireRow.Copy ws3.Range("A" & Rows.Count).End(3)(2) 
    End If 
Next cell 
ws3.Rows(1).Delete 
Application.ScreenUpdating = True 
End Sub 

上面的代码假定你有三个工作表Sheet1表,Sheet2的工作表Sheet 3,并在工作簿中。

该代码将删除Sheet1和Sheet2上任何现有的单元格内部颜色,然后突出显示含有红色重复项的行。

如果您已对这些图纸应用了一些颜色格式,最好使用条件格式来突出显示具有重复项的行,而不是通过VBA代码对它们进行着色。

+0

谢谢你现在就试试这个 – Neil