2012-03-02 15 views
1

"条件付き書式設定"を使用して値が重複しているセルを書式設定することは非常に簡単です(特定の背景やその他のスタイルを設定するなど)彼らのテキスト?例えばExcel形式の重複値 - セル内のテキストを変更する

A1 2332

A2 2333

A3 2334

A4 2334

はなるために:

A1 2332

A2 2333

A3 2334(1)

A4 2334(2)これを行うには

答えて

4

一つの方法は、ただ横に2番目の列を追加することです次の式を記入した元のデータ:

=IF(COUNTIF($A$1:$A$5000,A1)>1,A1& " (" & COUNTIF(A$1:A1,A1) & ")",A1) 

元のデータはA1:A5000にあります。 COUNTIFは非常に非効率的であることに注意してください。多くのデータがある場合は、計算に時間がかかることがあり、ワークブックのパフォーマンスに影響を与えることがあります。

大規模なワークブックでは、VBA Worksheet_Changeイベントを使用して値を編集することを検討します。このコードは、適切なワークシートモジュールに挿入する必要があります。 5000回のテスト記録では、それは2番目の遅れがありました。

Option Explicit 
Private Sub Worksheet_Change(ByVal Target As Range) 

Dim dataRng As Range 
Dim dataArr() As Variant, output() As String 
Dim y As Long, i As Long, j As Long, tmpcount As Long 

'Change "A1" to address of start of column you want to index. 
Set dataRng = Range("A1").Resize(Me.UsedRange.Rows.Count, 1) 
If Not Intersect(Target, dataRng) Is Nothing Then 
    dataArr = dataRng.Value 
    ReDim output(1 To UBound(dataArr, 1), 1 To 1) 
    'Strip old counts from data once in array. 
    For y = 1 To UBound(dataArr, 1) 
     If Right(dataArr(y, 1), 1) = ")" Then 
      dataArr(y, 1) = Left(dataArr(y, 1), InStr(dataArr(y, 1), " (") - 1) 
     End If 
    Next y 

    For i = 1 To UBound(dataArr, 1) 
     tmpcount = 0 
     output(i, 1) = dataArr(i, 1) 
     For j = 1 To UBound(dataArr, 1) 
      If dataArr(i, 1) = dataArr(j, 1) Then 
       tmpcount = tmpcount + 1 
       If j = i And tmpcount > 1 Then 
        output(i, 1) = dataArr(i, 1) & " (" & tmpcount & ")" 
        Exit For 
       End If 
       If j > i And tmpcount > 1 Then 
        output(i, 1) = dataArr(i, 1) & " (" & tmpcount - 1 & ")" 
        Exit For 
       End If 
      End If 
     Next j 
    Next i 
    Call printoutput(output, dataRng) 
End If 

End Sub 


Private Sub printoutput(what As Variant, where As Range) 
Application.EnableEvents = False 
where.Value = what 
Application.EnableEvents = True 
End Sub 

私は大きな仮定のカップル作った注意してください:私はあなたがA1でのインデックス開始する列を想定し

  1. を。別の列にある場合は、コードの7行目を調整する必要があります。
  2. 以前にインデックスが作成されていない限り、あなたのデータは決して ")"で終わらないと思っていました。そうでない場合は、このコードから離れてください!
関連する問題