如何从列表中删除所有重复的行

时间:2013-11-07 14:59:34

标签: excel excel-vba text-editor vba

我有一个包含200.000个电子邮件地址(每行一个)的文本文件(或Excel)。我需要删除所有重复的地址,包括原始地址 所以这个例子:

a@a.com

b@a.com

b@a.com

c@a.com

d@a.com

应删除b@a.com条目。 任何人都知道这样做的方法,而不循环200.000行

4 个答案:

答案 0 :(得分:2)

将数据放在A列,从A2开始

在B2中输入:

= COUNTIF(A:A,A2)并复制

启用AutoFilter,对于B列,取消选中1框(隐藏唯一项目)

删除可见行。

答案 1 :(得分:2)

previous post为例,我已经为您修改了语句,它应该在运行代码时创建一个包含所需数据的新工作表。您需要确保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

答案 2 :(得分:1)

如何使用COUNTIF查找重复项,然后将它们全部过滤掉并删除它们?

即。假设您的电子邮件位于A列中,请将此公式放在单元格B1中并将其复制到底部。

=COUNTIF(A:A; A1)>1

如果有重复,此公式将返回TRUE。过滤掉所有TRUE并删除这些行!

答案 3 :(得分:1)

不需要VBA,只需对列进行排序并检查单元格是否具有与上面单元格相同或更低的值,然后使用过滤器为TRUE。像这样:

=OR(A2=A1,A2=A3)