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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2016, 09:57   #1
Kapkom
Пользователь
 
Регистрация: 22.09.2014
Сообщений: 27
По умолчанию Автоматическое удаление строк по условию

Здравствуйте!

Столкнулся с таким вопросом.
Есть макрос на удаление строк:

For Each c In Range("b3:b27")
If c = "да" Then
c.EntireRow.Delete Shift:=xlUp
End If
Next

По этому макросу удаляются строки, в ячейках которых по столбцу b3:b27 указано значение "да". Однако, если значение "да" указано в идущих подряд ячейках, то строки по этим ячейкам удаляются через одну. Например, значение "да" указано в ячейках b4,b5,b6,b7. В данном примере удалятся строки по ячейкам b4 и b6, а строки по ячейкам b5 и b7 останутся. Можно, конечно, для того, чтобы такого не было, вышеуказанную комбинацию "for each c" в макросе повторить раз 10. Но иногда даже 10 повторений этого цикла недостаточно и приходится постоянно перезапускать макрос.

Скажите, пожалуйста, что надо указать в макросе, отличное от варианта повторения комбинации "for each c" несколько раз, чтобы не было такой проблемы.

Заранее большое спасибо.
Kapkom вне форума Ответить с цитированием
Старый 02.09.2016, 10:02   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
for r = 27 to 3 step -1
  if cells(r,2) = "да" then rows(r).delete
next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.09.2016, 12:18   #3
Kapkom
Пользователь
 
Регистрация: 22.09.2014
Сообщений: 27
По умолчанию

Спасибо большое за подсказку. Вот такой макрос в результате получился:

Set ss = Selection
For i = 20000 To 1 Step -1
If ss.Cells(i, 1).Value = "да" Then
ss.Cells(i, 1).Select
Selection.EntireRow.Delete Shift:=xlUp
End If
Next i
Kapkom вне форума Ответить с цитированием
Старый 02.09.2016, 12:52   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Не дай бог ошибиться с Selection...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.09.2016, 13:32   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

если "да" на разбросаны хаотично по листу, а припаркованы к одной колонке - то не так уж и страшно))
If ss.Cells(i, 1).Value = "да" Then rows(i).delete
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.09.2016, 13:38   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Ну может начать перебирать ниже задуманного, и не проверить например все нужные...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строк по опр условию 30gb Microsoft Office Excel 3 14.08.2014 19:12
Удаление строк по сложному условию с посимвольным стравнением значений ячеек Patlyuk Microsoft Office Excel 0 18.02.2014 09:12
Подсчет суммы по условию + удаление строк слагаемых scratik Microsoft Office Excel 4 21.06.2011 15:03
Excel 2007 автоматическое удаление старых строк при потоковом поступлении новых Swindler_1 Microsoft Office Access 5 17.03.2010 21:30
Удаление строк массива по условию Lexakazanskij Паскаль, Turbo Pascal, PascalABC.NET 9 12.09.2007 20:32