Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2009, 15:58   #1
AChrist
Пользователь
 
Регистрация: 29.11.2008
Сообщений: 31
По умолчанию Помогите оптимизировать удаление строк.

Добры. Появилась у меня необходимость удалить ненужные строки из массива которые не удовлетворяют условию. Автофильтром бы сделал, но не дает такие объемы копировать/удалять. Но потом разобрался путем сортировки. Мне стало чисто для себя интересно, можно ли сделать не таким "топорным" методом? Ибо макрос наверно на ночь надо было бы оставить
Всего строк было почти миллион. Пользуюсь 2007 офисом, так что ограничений не было.

Код:
Sub Макрос1()

 Dim i As Integer
 i = 1
 While i < 999999
 Application.ScreenUpdating = False
 If Cells(i, 3).Value <> 3 And Cells(i, 1).Value <> 22 Then
 Rows(i).Delete Shift:=xlUp
    Else
     i = i + 1
    End If
    Wend
End Sub

Последний раз редактировалось AChrist; 17.09.2009 в 16:06.
AChrist вне форума Ответить с цитированием
Старый 18.09.2009, 06:35   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

На сколько я понял, требуется оставить только те строки, в которых в 1-м столбце значение = 22, а в 3-м = 3. Остальные удалить. Так? Если так, то можно обойтись вообще без циклов. Попробуйте такой вариант:
Код:
Sub DelRows()
    Dim i As Long: Application.ScreenUpdating = False
    i = Cells.SpecialCells(xlCellTypeLastCell).Row + 1: Cells(i, 1) = 22
    [A:A].ColumnDifferences(Cells(i, 1)).EntireRow.Delete
    i = Cells.SpecialCells(xlCellTypeLastCell).Row + 1: Cells(i, 3) = 3
    [C:C].ColumnDifferences(Cells(i, 3)).EntireRow.Delete
    Cells(Rows.Count, 3).End(xlUp).EntireRow.Delete
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.09.2009, 13:51   #3
AChrist
Пользователь
 
Регистрация: 29.11.2008
Сообщений: 31
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
требуется оставить только те строки, в которых в 1-м столбце значение = 22, а в 3-м = 3. Остальные удалить. Так?
Именно. Попробовал - работает. Но только если строк не больше 65к. Когда я оставил как было 900к+ - удалились все строки.
AChrist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строк alexk Microsoft Office Excel 24 15.02.2011 08:34
Удаление множества строк Sinker БД в Delphi 16 07.04.2009 13:47
Удаление строк из Memo Leksda Общие вопросы Delphi 6 20.03.2009 15:31
Удаление строк Dr.Badnezz Общие вопросы Delphi 1 07.10.2008 15:22
удаление строк Dime_x Microsoft Office Excel 2 07.10.2008 13:38