删除重复行,仅针对列中的每个单元格
Remove duplicate lines, only per each cell on a column
我在每个单元格上都有重复的行,这些行只是 URL 地址,由 vbLf 分隔。
我需要删除 duplicate lines
,但仅 每个列上的每个单元格 。
我找到了下面的函数,但它只删除每个单元格的单词。
预先感谢任何有用的评论和答案。
Function RemoveDupeWords(text As String, Optional delimiter As String = " ") As String
Dim dictionary As Object
Dim x, part
Set dictionary = CreateObject("Scripting.Dictionary")
dictionary.CompareMode = vbTextCompare
For Each x In Split(text, delimiter)
part = Trim(x)
If part <> "" And Not dictionary.Exists(part) Then
dictionary.Add part, Nothing
End If
Next
If dictionary.Count > 0 Then
RemoveDupeWords = Join(dictionary.keys, delimiter)
Else
RemoveDupeWords = ""
End If
Set dictionary = Nothing
End Function
也许这样就可以了
sub RemoveDupeLine()
Dim coll As Collection
Dim i As Long, c, txt As String, arr As Variant
Dim rng As Range: Set rng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion
For Each c In rng
Set coll = New Collection
arr = Split(c.Value, vbLf)
For i = LBound(arr) To UBound(arr)
' Here's the trick. For a collection in this insert mode it cannot accept duplicate key entries. And in that I instruct him to ignore the error, he accumulates only unique values and move on.
On Error Resume Next
coll.Add Item:=arr(i), Key:=arr(i)
On Error GoTo 0
Next i
If coll.Count > 0 Then
For i = 1 To coll.Count
txt = txt & coll(i) & vbLf
Next i
End If
c.Value = txt
txt = ""
Set coll = Nothing
Next
End sub
祝你好运
如果您有 Windows Excel 2019+,您可以使用公式:
=TEXTJOIN(CHAR(10),,FILTERXML("<t><s>"& SUBSTITUTE(A2,CHAR(10),"</s><s>")& "</s></t>","//s[not (preceding::*=.)]"))
此外,如果您有最新的 Office 365 Insiders 版本,您可以将 FILTERXML
替换为新的 TEXTSPLIT
功能。
我在每个单元格上都有重复的行,这些行只是 URL 地址,由 vbLf 分隔。
我需要删除 duplicate lines
,但仅 每个列上的每个单元格 。
我找到了下面的函数,但它只删除每个单元格的单词。
预先感谢任何有用的评论和答案。
Function RemoveDupeWords(text As String, Optional delimiter As String = " ") As String
Dim dictionary As Object
Dim x, part
Set dictionary = CreateObject("Scripting.Dictionary")
dictionary.CompareMode = vbTextCompare
For Each x In Split(text, delimiter)
part = Trim(x)
If part <> "" And Not dictionary.Exists(part) Then
dictionary.Add part, Nothing
End If
Next
If dictionary.Count > 0 Then
RemoveDupeWords = Join(dictionary.keys, delimiter)
Else
RemoveDupeWords = ""
End If
Set dictionary = Nothing
End Function
也许这样就可以了
sub RemoveDupeLine()
Dim coll As Collection
Dim i As Long, c, txt As String, arr As Variant
Dim rng As Range: Set rng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion
For Each c In rng
Set coll = New Collection
arr = Split(c.Value, vbLf)
For i = LBound(arr) To UBound(arr)
' Here's the trick. For a collection in this insert mode it cannot accept duplicate key entries. And in that I instruct him to ignore the error, he accumulates only unique values and move on.
On Error Resume Next
coll.Add Item:=arr(i), Key:=arr(i)
On Error GoTo 0
Next i
If coll.Count > 0 Then
For i = 1 To coll.Count
txt = txt & coll(i) & vbLf
Next i
End If
c.Value = txt
txt = ""
Set coll = Nothing
Next
End sub
祝你好运
如果您有 Windows Excel 2019+,您可以使用公式:
=TEXTJOIN(CHAR(10),,FILTERXML("<t><s>"& SUBSTITUTE(A2,CHAR(10),"</s><s>")& "</s></t>","//s[not (preceding::*=.)]"))
此外,如果您有最新的 Office 365 Insiders 版本,您可以将 FILTERXML
替换为新的 TEXTSPLIT
功能。