I would suggest more general function:
Sub CustomSort()
Dim Sh As Worksheet, LR As Long
Dim ws as Worksheet
Set Sh = Sheets("Report")
Set ws = worksheets("Data")
LR = Sh.Cells(Rows.Count, 1).End(xlUp).Row
With Sh.Sort
.SortFields.Clear
.SortFields.Add Sh.Range("C4"), CustomOrder:=SortItems(ws.Range("B2", ws.Cells(Rows.Count, "B").End(xlUp)))
.SortFields.Add Sh.Range("D4"), CustomOrder:=SortItems(ws.Range("C2", ws.Cells(Rows.Count, "C").End(xlUp)))
.SortFields.Add Key:=Sh.Range("E4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.SetRange Sh.Range("A4:E" & LR)
.Header = xlYes
.Apply
End With
End Sub
Function SortItems(rngSort As Range) As String
Dim ArrSort() As Variant
Dim I As Long
ReDim ArrSort(1 To rngSort.Rows.Count)
For I = 1 To UBound(ArrSort)
ArrSort(I) = rngSort(I, 1)
Next
SortItems = Join(ArrSort, ",")
End Function
Bookmarks