2016-10-14 5 views
1

Я пытаюсь создать код, который мог бы фильтровать и удалять около 35 000 строк.Filter & Delete Entire Row

Я использовал приведенные ниже коды, но это занимает много времени (более 10 минут), может ли кто-нибудь помочь мне сделать это быстрее?

Код 1:

Range("$A$1:$S$50000").AutoFilter Field:=19, Criteria1:="Delete" 
ActiveSheet.AutoFilter.Range.Offset(1, 0).Rows.SpecialCells(xlCellTypeVisible).Delete (xlShiftUp) 

Код 2:

Dim RngToDelete As Range 
Range("$A$1:$S$50000").AutoFilter Field:=19, Criteria1:="Delete" 
Set RngToDelete = Selection.SpecialCells(xlCellTypeVisible) 
RngToDelete.Delete 

Спасибо, Amith

+0

Возможный дубликат [Excel VBA Performance - 1 миллион строк - удаление строк, содержащих значение, менее чем за 1 минуту] (http://stackoverflow.com/questions/30959315/excel-vba-performance-1-million- rows-delete-rows-contains-a-value-in-less) –

+0

Вы уже «application.screenupdating = FALSE»? Это сэкономит массу времени. –

+0

Да, я использовал - application.screenupdating = FALSE –

ответ

0

Вы можете выполнить задачу, используя AdvancedFilter с гораздо более высокой производительности.

A. Решение без VBA

Данные-> Расширенный фильтр, выберите «Фильтр списка на месте» и заполнить в области данных и критериев.

B. Решение с VBA Code

Range ("A1: S50000") AdvancedFilter Действие:. = XlFilterInPlace, CriteriaRange: = Range ("U1: U2"), Unique: = False

Определите критерии с именем поля (столбец 19) на ячейке U1 и '<> Удалить' на ячейке U2. Конечно, вы всегда можете разместить свой диапазон критериев в другом месте.