2011-05-03 49 views
0

我有一个包含两列数据的excel文档。 第一列有19k行数据,第二列有2k行数据。 第2列中的所有数据都存在于第1列中。 我想删除第一列中包含第二列数据的所有行。 有没有办法如何做到这一点提前> 感谢,Lazialeexcel删除具有相同数据的行

+0

第二列中是否有大量不同的值?例如,我们是在说4,40,400还是4000个不同的第二列值? – Jubbles 2011-05-03 16:43:51

回答

0

此代码将工作,通过柱A和删除,其具有在任何行中出现在列B值的任何行它假定两个列A和B值在第1行开始:

Sub RemoveDuplicates() 

    Dim colB As Variant, iRow As Long 
    colB = Range("B1:B2000") //Add you reference for column B 

    For iRow = Range("A1").End(xlDown).Row To 1 Step -1 
     If Not IsError(Application.Match(Cells(iRow, 1), colB, 0)) Then 
      Cells(iRow, 1).EntireRow.Delete 
     End If 
    Next iRow 

End Sub 
+0

就像你所做的那样,通过删除列B中的值,您正在更改列表以检查列A中的值。我认为@Laziale真的希望列A中的单元格被删除(保留列B),而不是整行。 – Excellll 2011-05-03 18:46:21

+0

@Excelllll - 虽然OP没有明确说明,如果是这种情况,可以通过删除EntireRow来轻易修复。让我们看看OP是否回来了他自己的一些评论。 – 2011-05-03 20:18:07

+0

我想指出你的逻辑在某些情况下不会完成任务。例如,如果列A包含{a,b,c,d,e,f},并且列B包含{f,e,d,c,b,a},则应删除所有行。但是,您的代码将保留前3行。 – Excellll 2011-05-03 21:03:29

0

这可能是更容易与grep做到这一点:每列

导出到文件,并做了“的grep -v” 。这里是一个例子:

$ cat col1.txt 
A 
B 
C 
D 
$ cat col2.txt 
B 
D 
$ grep -v -f col2.txt col1.txt 
A 
C 
0

使用VBA可能是最简单的方法。试试下面的宏。它将删除列A中与列B中的任何值匹配的所有单元格。如果您需要为其他列执行此操作,只需调整代码以匹配工作簿的设计即可。

Sub removematches() 

Dim firstcolumn() As Variant 
Dim colA As Range 
Dim colB As Range 
Dim i As Long, del As Long 

'This will set the ranges to look in. Note that this will only work for data with no blank cells. If you have blank cells, you can change these Set statements to the following: 
' Set colA = Range("A1:A100") if you have 100 rows you want to look at. 
Set colA = Range("A1", Range("A1").End(xlDown)) 
Set colB = Range("B1", Range("B1").End(xlDown)) 

firstcolumn = colA 

ReDim Preserve firstcolumn(1 To UBound(firstcolumn), 1 To 2) As Variant 
i = 1 
del = 0 

Do While i <= UBound(firstcolumn) 
    firstcolumn(i, 2) = Application.WorksheetFunction.CountIf(colB, firstcolumn(i, 1)) 
    If firstcolumn(i, 2) > 0 Then 
     Range("A1").Offset(i - del - 1, 0).Delete Shift:=xlUp 
     del = del + 1 
    End If 
    i = i + 1 
Loop 

End Sub 
相关问题