我有一个包含 200.000 个电子邮件地址(每行一个)的文本文件(或 Excel)。我需要删除所有重复的地址,包括原始地址所以这个例子:
a@a.com
b@a.com
b@a.com
c@a.com
d@a.com
应该删除两个 b@a.com 条目。任何人都知道不循环 200.000 行的方法
我有一个包含 200.000 个电子邮件地址(每行一个)的文本文件(或 Excel)。我需要删除所有重复的地址,包括原始地址所以这个例子:
a@a.com
b@a.com
b@a.com
c@a.com
d@a.com
应该删除两个 b@a.com 条目。任何人都知道不循环 200.000 行的方法
以上一篇文章为例,我已经为您修改了语句,它应该在您运行代码时创建一个包含您想要的数据的新工作表。您需要确保该ConnString
行指向您的文件并将单词更改为emailcolumn
包含您的电子邮件地址的列的名称。
我假设包含电子邮件地址的工作表称为 Sheet1,数据将转到新工作表的 A 列(如果需要,请更改代码):
Sub Excel_QueryTable()
Sheet2.Cells.ClearContents
Dim oCn As ADODB.Connection
Dim oRS As ADODB.Recordset
Dim ConnString As String
Dim SQL As String
Dim qt As QueryTable
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\t.xlsm;Extended Properties=Excel 8.0;Persist Security Info=False"
Set oCn = New ADODB.Connection
oCn.ConnectionString = ConnString
oCn.Open
SQL = "Select emailcolumn from [Sheet1$] GROUP BY emailcolumn HAVING COUNT(emailcolumn) = 1"
Set oRS = New ADODB.Recordset
oRS.Source = SQL
oRS.ActiveConnection = oCn
oRS.Open
Set qt = Worksheets(2).QueryTables.Add(Connection:=oRS, _
Destination:=Range("A1"))
qt.Refresh
If oRS.State <> adStateClosed Then
oRS.Close
End If
If Not oRS Is Nothing Then Set oRS = Nothing
If Not oCn Is Nothing Then Set oCn = Nothing
End Sub
将数据从 A2 开始放入 A 列
在 B2 中输入:
=COUNTIF(A:A,A2) 并向下复制
打开 AutoFilter 并为 B 列取消选中 1 框(隐藏唯一项目)
删除可见行。
如何使用 COUNTIF 查找重复项,然后将它们全部过滤并删除它们?
即假设您的电子邮件在A列中,将此公式放入单元格B1并将其复制到底部。
=COUNTIF(A:A; A1)>1
如果有重复,此公式将返回 TRUE。过滤掉所有 TRUE 并删除那些行!
不需要VBA,只需对列进行排序并检查单元格是否与上面或下面的单元格具有相同的值,然后使用过滤器为TRUE。像这样的东西:
=OR(A2=A1,A2=A3)