2012-03-02 6 views
1

"조건부 서식"을 사용하여 값이 중복 된 셀을 서식 지정하는 것은 매우 쉽습니다 (특정 배경을 설정하거나 다른 스타일을 설정하는 것처럼).하지만 어떻게 변경합니까? 그들의 텍스트? 예를 들어Excel 서식 중복 값 - 셀의 텍스트 변경

:

A1 2,332

A2 2,333

A3 2,334

A4 2,334

가되기 위해 :

A1 2332

A2 2333

A3 2334 (1)

A4 2334 (2)이 단지 옆에 두 번째 열을 추가하는 것입니다 할

답변

4

한 가지 방법은 당신의 다음 공식을 포함한 원본 데이터 :

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

원래 데이터가 A1 : A5000에 있습니다. COUNTIF은 매우 비효율적이므로 데이터가 많은 경우 워크 북의 성능을 계산하고 영향을 미칠 수 있습니다.

큰 통합 문서의 경우 VBA Worksheet_Change 이벤트를 사용하여 값을 편집하는 것이 좋습니다. 이 코드는 해당 워크 시트 모듈에 삽입해야합니다. 5000 개의 테스트 기록에는 두 번째 지연이있었습니다.

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 

가 나는 큰 가정의 부부했습니다 조심하십시오 :

  1. 난 당신 색인 할 열 A1에서 시작을 가정한다. 다른 열에 있으면 코드의 7 행을 조정해야합니다.
  2. 이전에 색인을 생성하지 않은 한 귀하의 데이터가 ")"로 끝나지 않을 것으로 생각했습니다. 그렇지 않은 경우이 코드에서 벗어나십시오!