Another way
Option Explicit
Sub abc()
Const shA As String = "ATemplate"
Const shB As String = "BTemplate"
Const shResults As String = "Output Results"
Dim aArr, w, i As Long, ii As Long, n As Long
Dim aOutput()
Dim dic As Object
With Worksheets(shA)
aArr = .Range("a1").CurrentRegion
End With
Set dic = CreateObject("scripting.dictionary")
ReDim w(UBound(aArr, 2) - 1)
With dic
.comparemode = 1
For i = 2 To UBound(aArr)
For ii = 2 To UBound(aArr, 2)
w(ii - 2) = aArr(i, ii)
Next
.Item(aArr(i, 2)) = w
Next
End With
With Worksheets(shB)
aArr = .Range("a1").CurrentRegion
End With
ReDim aOutput(1 To UBound(aArr), 1 To 14)
With dic
For i = 2 To UBound(aArr)
If .exists(aArr(i, 2)) Then
n = n + 1: w = .Item(aArr(i, 2))
For ii = 0 To UBound(w)
aOutput(n, ii + 1) = w(ii)
Next
aOutput(n, 13) = aArr(i, 15)
aOutput(n, 14) = CDbl(aArr(i, 16))
End If
Next
End With
If Not Evaluate("ISREF('" & shResults & "'!A1)") Then
With Worksheets.Add(After:=Worksheets(Worksheets.Count))
.Name = shResults
End With
End If
With Worksheets(shResults)
.Cells.Delete
Worksheets(shA).Range("b1:m1").Copy .Range("a2")
Worksheets(shB).Range("o1:p1").Copy .Range("m2")
.Range("a3").Resize(n, UBound(aOutput, 2)) = aOutput
End With
End Sub
Bookmarks