First, you don't need a colon at the end of every line! 
Second, avoid selecting things - it's unnecessary 99.86% of the time.
Third, always specify the property you want - even .Value
Untested:
Dim wsAN As Excel.Worksheet
R_COUNT = Worksheets("AN XML").Cells(1, 4).Value ' count occupied rows
'---------------------------------------------
For Cycle = 1 To 6 ' Do 6 SORT passes to capture 6 identical multi entries (change this if more is req'd) (LIKE data types for comparison)
Set wsAN = Sheets("AN SOURCE")
With wsAN
With .Sort
With .SortFields
.Clear
.Add Key:=wsAN.Range(wsAN.Cells(3, 1), wsAN.Cells(R_COUNT, 1)), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=wsAN.Range(wsAN.Cells(3, 6), wsAN.Cells(R_COUNT, 6)), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=wsAN.Range(wsAN.Cells(3, 5), wsAN.Cells(R_COUNT, 5)), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
End With
.SetRange wsAN.Range(wsAN.Cells(3, 1), wsAN.Cells(R_COUNT, 25))
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'====================================
For R_COUNTER = 3 To R_COUNT ' count from row 3 to last occupied row
R_STRNG = "" 'Null out any legacy data
R_STRNG = Right(.Cells(R_COUNTER, 5).Value, 4) 'Assigns new data - Returns .xls, xlsm, .pdf etc
EX_STRNG = "" 'Null out any legacy data
EX_STRNG = (.Cells(R_COUNTER, 6).Value) 'Returns EXIST string
NEW_STRNG = "" 'Null out any legacy data
NEW_STRNG = EX_STRNG & " " & R_STRNG 'Create NEW string
FLAGGED = ""
If (.Cells(R_COUNTER, 1).Value) = (.Cells(R_COUNTER - 1, 1).Value) And (.Cells(R_COUNTER, 6).Value) = (.Cells(R_COUNTER - 1, 6).Value) Then FLAGGED = "WRITE"
If FLAGGED = "WRITE" Then .Cells(3, 1).Offset(R_COUNTER - 3, 5) = NEW_STRNG
Next R_COUNTER
'====================================
Next Cycle
End With
I am not suggesting this is the most efficient way of achieving your ends, just amending the existing code.
Bookmarks