Try this
VB Code:
  1. Sub TopTwo()
  2. Dim rngData As Range
  3. Dim asOutput() As String
  4. Dim lRowNum As Long
  5. Dim bOn2ndRow As Boolean
  6. Dim wksNewSheet As Worksheet
  7.  
  8.     'You will need to change this line to correctly refer
  9.     'to your data range (excluding the header row)
  10.     Set rngData = ThisWorkbook.Worksheets(1).Range("A2:B10")
  11.    
  12.     'Initialize the array
  13.     ReDim asOutput(0 To 1, 0 To 0)
  14.    
  15.    
  16.     With rngData
  17.         'Sort by Rank and then name
  18.         .Sort Key1:=.Cells(1, 1), Order1:=xlAscending, _
  19.             Key2:=.Cells(1, 2), Order2:=xlAscending, _
  20.             Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
  21.             Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
  22.             DataOption2:=xlSortNormal
  23.            
  24.        
  25.         'load the first record into the array
  26.         asOutput(0, 0) = .Cells(1, 1).Value
  27.         asOutput(1, 0) = .Cells(1, 2).Value
  28.         'note that we are next loading a "2nd" row
  29.         bOn2ndRow = True
  30.        
  31.         'Loop through the rest of the rows
  32.         For lRowNum = 2 To .Rows.Count
  33.            
  34.             'If the Next rank is different from the last recorded...
  35.             If .Cells(lRowNum, 1).Value <> asOutput(0, UBound(asOutput, 2)) Then
  36.                
  37.                 '...Add a new record to the array
  38.                 ReDim Preserve asOutput(0 To 1, UBound(asOutput, 2) + 1)
  39.                 asOutput(0, UBound(asOutput, 2)) = .Cells(lRowNum, 1)
  40.                 asOutput(1, UBound(asOutput, 2)) = .Cells(lRowNum, 2)
  41.                
  42.                 '...and note that we are next loading a "2nd" row
  43.                 bOn2ndRow = True
  44.                            
  45.             'If we are loading a "2nd" Row
  46.             ElseIf bOn2ndRow Then
  47.                
  48.                 '...Add a new record to the array
  49.                 ReDim Preserve asOutput(0 To 1, UBound(asOutput, 2) + 1)
  50.                 asOutput(0, UBound(asOutput, 2)) = .Cells(lRowNum, 1)
  51.                 asOutput(1, UBound(asOutput, 2)) = .Cells(lRowNum, 2)
  52.                
  53.                 '...and note that we are next loading a "1st" row
  54.                 bOn2ndRow = False
  55.             End If
  56.         Next lRowNum
  57.     End With
  58.    
  59.     'Add a new Sheet
  60.     Set wksNewSheet = ThisWorkbook.Worksheets.Add
  61.    
  62.     With wksNewSheet.Range("A1")
  63.         'Write the Headers
  64.         .Value = "Rank"
  65.         .Offset(0, 1).Value = "Name"
  66.        
  67.         'Copy the array onto the new sheet
  68.         For lRowNum = 0 To UBound(asOutput, 2)
  69.             .Offset(1 + lRowNum, 0) = asOutput(0, lRowNum)
  70.             .Offset(1 + lRowNum, 1) = asOutput(1, lRowNum)
  71.         Next lRowNum
  72.     End With
  73.    
  74.     'Clear Object variables
  75.     Set wksNewSheet = Nothing
  76. End Sub