2017-01-17 7 views
1

私はINC0001、INC0002などのような値を持つ列を持っています。2つのForループを使用せずに重複する値を見つけて_countを追加する必要があります。
例: INC001

INC002 DATA-

INC003 INC001

INC002 INC001
以下の出力が
INC001

INC002 INC003

INC001_1 INC002_1

INC001_2であるべきです。Excel VBA - 列内の重複する値を検索して_countを追加する方法

私は2 forループを使って行っていますが、約15000レコードで約15-20分かかります。マクロを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

あなたが 2.削除キー – 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

ファンタスティックにカウント 4. Appent発生を計算する 3.使用COUNTIFを複製新しいCOLにVBA 1.コピーデータを書き込むことなく解決することができるステップforumlaアプリケーションによるステップを使用して!魅力のように動作します。大変ありがとうございます! :) –

関連する問題