字典法请测试:
Sub Macro2()
Dim arr, brr, crr(), t, sh As Worksheet, d As Object, ds As Object, i&, m&
Set d = CreateObject("scripting.dictionary")
Set ds = CreateObject("scripting.dictionary")
arr = [a1].CurrentRegion
For i = 2 To UBound(arr)
d(arr(i, 1)) = d(arr(i, 1)) & "," & i
Next
ReDim crr(1 To i, 1 To 4)
For Each sh In Sheets
If d.Exists(sh.Name) Then
brr = sh.[a1].CurrentRegion
For i = 2 To UBound(brr)
ds(brr(i, 1) & brr(i, 2) & brr(i, 3) & brr(i, 4)) = ""
Next
t = Split(d(sh.Name), ",")
m = 0
For i = 1 To UBound(t)
If Not ds.Exists(arr(t(i), 1) & arr(t(i), 3) & arr(t(i), 4) & arr(t(i), 2)) Then
m = m + 1
crr(m, 1) = arr(t(i), 1)
crr(m, 2) = arr(t(i), 3)
crr(m, 3) = arr(t(i), 4)
crr(m, 4) = arr(t(i), 2)
End If
Next
If m > 0 Then sh.Cells(Rows.Count, 1).End(3).Offset(1).Resize(m, 4) = crr
ds.RemoveAll
End If
Next
End Sub
|