2017-04-01 154 views
-1

如何以簡單的方式比較Excel中的兩張大數據集,無論是使用VBA還是使用公式?將兩張表格與唯一的列匹配進行比較

我有兩張每張10列。每張紙都有B列,並帶有唯一的批號。我想比較兩張表之間具有相同B列值的行,並且如果其他9列中存在差異,請將整行復制到另一張新表。

例如: enter image description here

表之一是主片。表1和表2的名稱相同,但名稱不同,名稱爲「b」,所以我需要名稱b和第三張紙的年齡,而第三張紙的年齡單元應該是彩色的,因爲年齡不同。

如果我有大量的列而不是年齡很難識別,通常我在每列上使用vlookup作爲唯一,並使用if函數來檢查匹配與否。

+0

片1是主片和要在片材2進行檢查。如果在工作表2中發現差異,則表示將工作複製到工作表3 – safwan

+0

請添加一個示例(最好使用屏幕截圖),以說明您確切需要的內容。 – jrook

+0

請添加您已經創建的代碼或公式以解決您的任務,並詳細說明他們爲什麼不能爲您工作。 – Jeeped

回答

1

您可以嘗試下面給出的代碼。

先決條件: 1)代碼假定存在名爲Sheet 1中,Sheet 2中和表Sheet 3

2工作簿三片)表Sheet 1和sheet2具有各10列以相同的標頭。

下面的代碼將Sheet2上的數據與基於列B的Sheet1上的數據進行比較,即如果在Sheet1的列B中發現Sheet2上列B的值,代碼將比較兩個列中的所有列的數據如果數據不匹配或不同,數據將被複制到Sheet3。

Sub CompareAndCopyUnMatchedData() 
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet 
Dim x, y, z, dict1 
Dim i As Long, j As Long 
Dim str As String 
Application.ScreenUpdating = False 
Set ws1 = Sheets("Sheet1") 
Set ws2 = Sheets("Sheet2") 
Set ws3 = Sheets("Sheet3") 
ws3.Cells.Clear 
ws1.Range("A1:J1").Copy ws3.Range("A1") 
x = ws1.Range("A1").CurrentRegion.Value 
y = ws2.Range("a1").CurrentRegion.Value 
Set dict1 = CreateObject("Scripting.Dictionary") 
For i = 2 To UBound(x, 1) 
    dict1.Item(x(i, 2)) = x(i, 1) & "," & x(i, 2) & "," & x(i, 3) & "," & x(i, 4) & "," & x(i, 5) & "," & x(i, 6) & "," & x(i, 7) & "," & x(i, 8) & "," & x(i, 9) & "," & x(i, 10) 
Next i 
For i = 2 To UBound(y, 1) 
    If dict1.exists(y(i, 2)) Then 
     If dict1.Item(y(i, 2)) <> y(i, 1) & "," & y(i, 2) & "," & y(i, 3) & "," & y(i, 4) & "," & y(i, 5) & "," & y(i, 6) & "," & y(i, 7) & "," & y(i, 8) & "," & y(i, 9) & "," & y(i, 10) Then 
      str = y(i, 1) & "," & y(i, 2) & "," & y(i, 3) & "," & y(i, 4) & "," & y(i, 5) & "," & y(i, 6) & "," & y(i, 7) & "," & y(i, 8) & "," & y(i, 9) & "," & y(i, 10) 
      z = Split(str, ",") 
      ws3.Range("A" & Rows.Count).End(3)(2).Resize(1, 10).Value = z 
     End If 
    End If 
Next i 
Set dict1 = Nothing 
Application.ScreenUpdating = True 
End Sub 

編輯: 如果你有興趣,突出在Sheet2上的單元不與工作表Sheet1上相應的單元格匹配,您可以使用條件格式實現這一目標。 爲此,從單元格A1開始選擇Sheet2上的所有數據,並使用下面給出的公式爲條件格式創建新規則,並根據您的選擇設置格式。 因此,如果Sheet2!E10與Sheet1!E10不匹配,Sheet2!E10將按照您在條件格式中設置的格式高亮顯示或格式化。用於條件格式

公式如下...

=A1<>Sheet1!A1 
+0

thnxx很多excel的主人,而不是增加從10列到12是可以的ws1.Range(「A1:L1」) – safwan

+0

你的意思是如果你有12列而不是10?如果是這樣,你還需要增加下面的代碼中的數組元素,例如x(i,11),x(i,12),y(i,11)和y(i,12)他們。 – sktneer

+0

謝謝所有人,它工作得很好!另一件事是什麼都不匹配是在表3中,是否有任何其他方式來確定哪個單元格發生了變化,就好像我需要完整的原材料那樣很好,但也需要知道哪個單元格發生了變化,只有單元格顏色或其他內容 – safwan

相關問題