1
使用「條件格式設置」格式化具有重複值的單元格(如設置特定背景或其他樣式)非常容易,但是如何更改他們的文字?Excel格式重複值 - 更改單元格中的文本
例如:
A1 2332
A2 2333
A3 2334
A4 2334
成爲:
A1 2332
A2 2333
A3 2334(1)
A4 2334(2)
使用「條件格式設置」格式化具有重複值的單元格(如設置特定背景或其他樣式)非常容易,但是如何更改他們的文字?Excel格式重複值 - 更改單元格中的文本
例如:
A1 2332
A2 2333
A3 2334
A4 2334
成爲:
A1 2332
A2 2333
A3 2334(1)
A4 2334(2)
一種方式做,這是僅次於添加第二個欄到您的原始數據填寫如下公式:
=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
當心,我已經做了幾個大的假設: