Hi Andy, played around with your code
Public Sub Treat3()
Dim RefRg As Range, R As Range
Dim WkRg As Range, W As Range
Dim HRg As Range
Dim DataRg As Range
Const WS1Name As String = "Sheet1"
Const WS2Name As String = "Test"
Set RefRg = Sheets(WS1Name).Range("I14:M14")
Set HRg = Sheets(WS1Name).Range("D2:P2")
Set WkRg = Sheets(WS1Name).Range("D3:D12")
Worksheets(WS2Name).Cells.Clear
For Each R In RefRg
For Each W In WkRg
If (R = W) Then
HRg.Copy Destination:=Sheets(WS2Name).Cells(Rows.Count, "B") '.End(3)(2)
W.Resize(1, HRg.Count).Copy Destination:=Sheets(WS2Name).Cells(Rows.Count, "B").End(3)(2)
End If
Next W
Next R
Application.CutCopyMode = False
Set HRg = Worksheets(WS2Name).Range("B2").CurrentRegion
Debug.Print HRg.Address
Worksheets(WS2Name).Sort.SortFields.Clear
Worksheets(WS2Name).Sort.SortFields.Add Key:=Range("K" & HRg.Rows(1).Row & ":K" & HRg.Rows.Count + 1), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With Worksheets(WS2Name).Sort
.SetRange HRg
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B" & HRg.Rows.Count + 2).Select
MsgBox ("Job Done")
End Sub
Bookmarks