2017-01-17 51 views
1

我有一列值如INC0001,INC0002等。我需要找到重複值並追加_count而不使用2 For循環。
例如。對於以下DATA-
INC001
INC002
INC003
INC001
INC002
INC001
輸出應該
INC001
INC002
INC003
INC001_1
INC002_1
INC001_2
Excel VBA - 如何搜索列中的重複值並追加_count

我已經完成了它使用2 for循環,但它需要大約15-20分鐘約15000記錄。任何更有效的方式在Excel宏中做到這一點?
現有代碼

Sub AppendMacro() 
    Worksheets("Sheet1").Activate 
    Dim lngMaxRow As Long 
    lngMaxRow = Range("A" & Rows.count).End(xlUp).Row 
    Dim count As Integer 
    For i = 2 To lngMaxRow - 1 Step 1 
    Dim incNum As String 
    incNum = ActiveSheet.Range("A" & i).Value 
    count = 1 
    If (Len(incNum) = 11) Then 
     For j = i + 1 To lngMaxRow Step 1 
     If (incNum = ActiveSheet.Range("A" & j).Value) Then 
      ActiveSheet.Range("A" & j).Value = ActiveSheet.Range("A" & j).Value & "_" & count 
      count = count + 1 
     End If 
     Next 
    End If 
    Next 
End Sub 
+3

如果您有現有的代碼,然後包括它在你的問題可能會阻止它被關閉。我會建議也許使用這個字典 - 使用鍵的值並存儲實例號作爲值。你只需要一個循環。 –

+1

您可以先對數據進行排序嗎?如果是這樣,它會使VBA更簡單,甚至可以使用公式而不是VBA。 – BruceWayne

+0

使用一步一步的forumla應用程序,你可以解決沒有寫入VBA 1.複製數據到一個新的col 2.刪除重複項 3.使用COUNTIF來計算髮生 4.對密鑰的追加計數 – dgorti

回答

2

你可以去這樣的:

Sub AppendMacro() 
    Dim cell As Range 
    With Worksheets("Sheet1") 
     With .Range("A1", .Cells(.Rows.count, 1).End(xlUp)) 
      For Each cell In .Cells 
       cell.Value = cell.Value & "_" & WorksheetFunction.CountIf(.Parent.Range(.Cells(1), cell), cell.Value & "_*") 
      Next 
      .Replace what:="_0", replacement:="", lookat:=xlPart 
     End With 
    End With 
End Sub 
+0

太棒了!像魅力一樣工作。非常感謝! :) –