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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2009, 18:42   #1
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию Удаление определеных строк

Помогите решить оду задачку, вижу ошибку но не знаю как ее решить. Мне надо удалить определенные диапазоны строк но я не силен в свойствах Rows и мне все время выдает ошибку. кусок кода здесь, а строки должны удаляться так 3-6, затем 4-7, 5-8 и так далее до тех пор пока не кончаться значения в столбце A.

p = 3
Do While Range("A" + Trim(Str(p))).Value <> ""
Rows(p, p + 3).Select
Selection.Delete Shift:=xlUp
p = p + 1
Loop
Vik-00 вне форума Ответить с цитированием
Старый 15.04.2009, 19:28   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а напишите-ка вместо вашего кода такую строку:
Range([a3], [a3].End(xlDown)).Delete
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 15.04.2009, 21:57   #3
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
а напишите-ка вместо вашего кода такую строку:
Range([a3], [a3].End(xlDown)).Delete
это не то. тут действие со строкой и столбцом.
Vik-00 вне форума Ответить с цитированием
Старый 15.04.2009, 22:43   #4
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Если до меня правильно дошёл смысл задачи, то можно попробовать вместо красной строки такое:

For i = 1 To 4
Rows(p).Select
pivas вне форума Ответить с цитированием
Старый 16.04.2009, 05:33   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Я бы сделал так:
Код:
Dim i As Long, x As Range
For i = 3 To Cells(Rows.Count, "A").End(xlUp).Row
    If (i - 2) Mod 5 <> 0 Then If x Is Nothing Then Set x = Rows(i) Else Set x = Union(x, Rows(i))
Next
x.Delete
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 16.04.2009 в 05:40.
SAS888 вне форума Ответить с цитированием
Старый 16.04.2009, 12:22   #6
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от pivas Посмотреть сообщение
Если до меня правильно дошёл смысл задачи, то можно попробовать вместо красной строки такое:

For i = 1 To 4
Rows(p).Select
Тут не уверен, или я не понимаю. Мне надо удалять диапазон строк, по принципу с 3 по 6 потом с 4 по 7 и так до конца списка.
Vik-00 вне форума Ответить с цитированием
Старый 16.04.2009, 12:55   #7
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Я бы сделал так:
Код:
Dim i As Long, x As Range
For i = 3 To Cells(Rows.Count, "A").End(xlUp).Row
    If (i - 2) Mod 5 <> 0 Then If x Is Nothing Then Set x = Rows(i) Else Set x = Union(x, Rows(i))
Next
x.Delete
Не получилось, exel просто повис и все, пришлось жестко выгружать. У меня около 42 000 строк в результате этой операции должно остаться 8 000
Vik-00 вне форума Ответить с цитированием
Старый 16.04.2009, 13:13   #8
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

В данном варианте начиная с 3 строки удаляются диапазоны по 4 строки, т.е. каждая пятая остаётся.

Sub Udalenie()
p = 3
Do While Range("A" + Trim(Str(p))).Value <> ""
For i = 1 To 4
Rows(p).Select
Selection.Delete Shift:=xlUp
Next i
p = p + 1
Loop
End Sub

или опять не то?
pivas вне форума Ответить с цитированием
Старый 16.04.2009, 15:52   #9
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от pivas Посмотреть сообщение
В данном варианте начиная с 3 строки удаляются диапазоны по 4 строки, т.е. каждая пятая остаётся.

Sub Udalenie()
p = 3
Do While Range("A" + Trim(Str(p))).Value <> ""
For i = 1 To 4
Rows(p).Select
Selection.Delete Shift:=xlUp
Next i
p = p + 1
Loop
End Sub

или опять не то?
Да это работает, единственное занимает достаточно много времени. Может возможно как то ускорить ??? У меня около 52 000 строк оказалось, и эта работа где то за час укладываеться.

Последний раз редактировалось Vik-00; 16.04.2009 в 17:09.
Vik-00 вне форума Ответить с цитированием
Старый 16.04.2009, 20:30   #10
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Попрбуй это:

Sub Udalenie()
Application.ScreenUpdating = False
p = 3
Do While Range("A" + Trim(Str(p))).Value <> ""
Range(Cells(p, 1), Cells(p + 3, 1)).Select
Selection.EntireRow.Delete
p = p + 1
Loop
Application.ScreenUpdating = True
End Sub

У меня 65000 строк обрабатывал около 2-3 минут
pivas вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строк alexk Microsoft Office Excel 24 15.02.2011 08:34
Удаление из ListBox строк S.T.A.L.K.E.R. Общие вопросы Delphi 2 27.09.2009 05:15
Удаление строк из 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