【发布时间】:2017-08-29 02:57:02
【问题描述】:
我处于紧急情况。专家的任何帮助将不胜感激。很抱歉,因为它已被多次询问。我已经尝试了很多方法。但似乎没有什么可以解决我的问题。
我的查询是我有 3 列,并且都有电子邮件地址。我想运行一些东西,它将识别所有列中的任何重复项并删除保持原始值的重复项。我试过删除重复项,但它只适用于一列。我使用了 excel 2013。我已经与您分享了我的数据和最近从这里获取的 VBA 代码。
https://docs.google.com/spreadsheets/d/1iCvKBZbuOyWAzDvKfRvDgT41x8VQO-V-OXMgcBbJQko/edit?usp=sharing
Sub RemoveDups()
Dim wrkSht As Worksheet
Dim lLastCol As Long
Dim lLastRow As Long
Dim i As Long
'Work through each sheet in the workbook.
For Each wrkSht In ThisWorkbook.Worksheets
'Find the last column on the sheet.
lLastCol = LastCell(wrkSht).Column
'Work through each column on the sheet.
For i = 1 To lLastCol
'Find the last row for each column.
lLastRow = LastCell(wrkSht, i).Row
'Remove the duplicates.
With wrkSht
.Range(.Cells(1, i), .Cells(lLastRow, i)).RemoveDuplicates Columns:=1, Header:=xlNo
End With
Next i
Next wrkSht
结束子
'此函数将返回对工作表中最后一个单元格或工作表上指定列的引用。 公共函数 LastCell(wrkSht As Worksheet, Optional Col As Long = 0) As Range
Dim lLastCol As Long, lLastRow As Long
On Error Resume Next
With wrkSht
If Col = 0 Then
lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
lLastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
Else
lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
lLastRow = .Columns(Col).Find("*", , , , xlByColumns, xlPrevious).Row
End If
If lLastCol = 0 Then lLastCol = 1
If lLastRow = 0 Then lLastRow = 1
Set LastCell = wrkSht.Cells(lLastRow, lLastCol)
End With
On Error GoTo 0
结束函数
【问题讨论】:
-
欢迎来到 SO。你看过this吗?看起来它会解决你的问题。所有列都在一张还是多张上?此外,如果您发布您所写内容的示例以及您试图实现的目标以及您收到的任何错误消息,人们通常更有可能为您提供帮助。您可能还想查看how to ask a question。
-
感谢您的回复。是的,我试过你提到的那个。但是当我运行宏时没有任何变化。我所有的数据都在一张纸上。他们有 A-M 专栏。所有都包含电子邮件地址。我想检查每个电子邮件地址是否重复。如果重复,则将其删除,保留原始值。我在单独的列中有超过 5000 封电子邮件。
-
通过添加您已更改的代码来编辑您的问题,以便人们可以看到您在做什么。
-
我已经添加了我的代码和数据。希望人们现在可以帮助我:(
标签: excel vba duplicates formula