2013-10-07 3 views
0

Необходимо удалить несколько строк в CSV-файле в Excel на основе соответствия в столбце L на листе 1 со столбцом A на листе2. Содержимое - это адреса электронной почты. Как я могу это достичь?Удалить всю строку на основе соответствия?

Итак, если столбец sheet2 имеет адрес электронной почты, который соответствует любому из адресов электронной почты в sheet1 - столбец L, то он должен удалить всю строку из листа 1, где находится этот адрес электронной почты.

Лист1 ниже: Sheet1

Sheet2 ниже: Sheet2

@mehow, вот образ, который я получаю, когда я запустить свой код в качестве модуля: Error with mehow's code

+0

Umm, Вы можете использовать автофильтр? –

+0

Как использовать автофильтр? –

+0

Вы можете увидеть пример автофильтра [здесь] (http://stackoverflow.com/questions/11631363/how-to-copy-a-line-in-excel-using-a-specific-word-and-pasting-to -another-excel-s) –

ответ

1

Это будет работать, очень быстро для того, что вы хотите сделать, поскольку оно не включает ЛЮБЫЕ циклы.

Sub DeleteDuplicates() 

Dim StartingScreenUpdateValue As Boolean 
Dim StartingEventsValue As Boolean 
Dim StartingCalculations As XlCalculation 

With Application 
    StartingScreenUpdateValue = .ScreenUpdating 
    StartingEventsValue = .EnableEvents 
    StartingCalculations = .Calculation 
    .ScreenUpdating = False 
    .EnableEvents = False 
    .Calculation = xlCalculationManual 
End With 


Dim varTestValues As Variant 
Dim sh1 As Worksheet 
Dim sh2 As Worksheet 

Set sh1 = Sheets("Sheet1") 
Set sh2 = Sheets("Sheet2") 

With sh2 
    varTestValues = .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) 
End With 

sh1.Range("L1", sh1.Range("L" & sh1.Rows.Count).End(xlUp)) _ 
    .AutoFilter Field:=12, Criteria1:=Application.Transpose(varTestValues), Operator:=xlFilterValues 

sh1.Range("L2", sh1.Range("L" & sh1.Rows.Count).End(xlUp)) _ 
    .SpecialCells(xlCellTypeVisible).EntireRow.Delete 

sh1.AutoFilterMode = False 

With Application 
    .ScreenUpdating = StartingScreenUpdateValue 
    .EnableEvents = StartingEventsValue 
    .Calculation = StartingCalculations 
End With 

End Sub 

Примечание: Этот код выполняется при условии, ваши данные заголовки, если он не пожалуйста, сообщите.

ПОМНИТЕ Всегда запускать любой код на копии ваших данных, а не фактические данные, пока вы не уверены в том, что он работает на 100%.

+0

Где я могу это поставить? Да, у меня есть заголовки на обоих листах, которые занимают первый ряд. –

+0

Добавил это как макрос и запустил его, и это удалило все в sheet1, а sheet2 остался прежним. –

+0

Я получаю сообщение об ошибке: Метод: автофильтр области объекта не удался. –