2015-05-18 26 views
2

我在列中有大約300個名稱,我想對它們進行排名並希望包含重複值,例如:如果Smith是列表中的#3和#4,它們將是放在那裏。需要對列中的重複文本值進行排序Excel vba

我當前的代碼,這是行不通的:

Sub karp() 
Dim Prescribers As Worksheets 
Dim n, r, LR As Long 
Dim name1, name2 As String 

LR = Cells(Rows.Count, "b").End(xlUp).Row 

    For n = 4 To LR   'to loop through the range for a match 
     For a = 1 To 273 'number of possible name ranks 
      Sheets("Names").Cells(n, 3) = a      'places rank score 
       name1 = Sheets("Names").Cells(n, 3).Value   'checks name 
       name2 = Sheets("Names").Cells(n + 1, 3).Value  'checks next name 
      If name1 <> name2 Then 
     Next a 
     Next n 
      End If 
    Next n 

End Sub 

任何建議在維修?

+6

您正嘗試在'如果... Then'語句內做你'Next'聲明。你必須在'下一個'之前有'結束' - 你不能跨越範圍。你也有3個'Next'和2''For'。你將不得不從上到下重做。我甚至不確定在這段代碼中擁有'If'語句的意義。 – FreeMan

+2

請注意,如果您正確縮進您的代碼,這將是明顯的。 – RubberDuck

+2

@ Bob22:你的問題目前還不是很清楚,也許你可以在你的問題中向我們展示一張表格,以幫助我們更好地理解你想要做的事情 - 還有[Freeman](http://stackoverflow.com/用戶/ 2344413/freeman)說,你的代碼是沒有意義的...... –

回答

1

,如果我理解正確的話,那麼你可以使用這個:

Sub karp() 
    Dim i&, Cl As Range, rn& 
    Dim Dic As Object: Set Dic = CreateObject("Scripting.Dictionary") 
    Dic.CompareMode = vbTextCompare 
    i = Cells(Rows.Count, "b").End(xlUp).Row 
    rn = 1 
    For Each Cl In Range("C4:C" & i) 
     If Not Dic.exists(Trim(Cl.Value) & Trim(Cl.Offset(, 1).Value)) Then 
      Dic.Add Trim(Cl.Value) & Trim(Cl.Offset(, 1).Value), rn 
      rn = rn + 1 
     End If 
    Next Cl 
    For Each Cl In Range("C4:C" & i) 
     Cl.Offset(, 2).Value = Dic(Trim(Cl.Value) & Trim(Cl.Offset(, 1).Value)) 
    Next Cl 
End Sub 

輸出

enter image description here

+0

很有天才瓦西里!我不確定它爲什麼有效,但它確實有效。我必須弄清楚如何將排列從2列移動到左邊一個,但我假設這是偏移量。謝謝謝謝! – Bob22

相關問題