您可以嘗試下面給出的代碼。
先決條件: 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
片1是主片和要在片材2進行檢查。如果在工作表2中發現差異,則表示將工作複製到工作表3 – safwan
請添加一個示例(最好使用屏幕截圖),以說明您確切需要的內容。 – jrook
請添加您已經創建的代碼或公式以解決您的任務,並詳細說明他們爲什麼不能爲您工作。 – Jeeped