![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
а все равно надо будет "скучным" циклом по всему пройтись (см. Do ... Loop) с помощью Union собрать в один диапазон
а потом уже весело одной командой удалить. вот скучный цикл делает то что написано в названии. Код:
затрудняюсь сказать вообще вы уловите разницу в продолжительности работы этих процедур при удалении 1000 строк, не говоря о 10-20 штуках.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#12 | ||
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]() Цитата:
Цитата:
Код:
P.S. Забыл пояснить, что если в одной строке диапазона найдется несколько пустых ячеек, то использовать ...SpecialCells(xlCellTypeBlanks).E ntireRow.Delete не получится, т.к. данная команда неприменима к пересекающимся диапазонам. Именно поэтому в коде применено получение нового "чистого" диапазона с помощью Intersect...
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 11.12.2010 в 13:04. Причина: Добавлено |
||
![]() |
![]() |
![]() |
#13 |
Регистрация: 25.11.2010
Сообщений: 7
|
![]()
Я вобщето про случай проще спрашивал. Так что все таки понял как можно без циклов
Просто удалить несколько строк "от меня и до следующего дуба". Без всяких дополнительных условий, только как в Rows("1:200").Delete вместо явного указания 1-й и последней строки поставить переменные? До сегодня использовал For... Next и удалял по 1 строке... Вот осенило наконец. Может кому еще поможет совсем начинающему. Пример удаления 200 строк без цикла: Sub nRowDelete() Dim DelRows As String Dim RowFirst As Integer, RowEnd As Integer RowFirst = 1 'первая строка для удаления RowLast = 200 'последняя строка DelRows = RowFirst & ":" & RowLast Rows(DelRows).Delete End Sub |
![]() |
![]() |
![]() |
#14 |
Регистрация: 25.01.2011
Сообщений: 4
|
![]()
Здравствуйте!
Пожалуйста помогите сделать макрос для "производственных задач" Дано: массив - 6 столбцов, около 1000 строк. Задача макроса: удалять строки, в которых есть только одна пустая ячейка (она всегда находится в 5 столбце). Если же в строке больше чем 1 пустая ячейка (например 2 рядом) - оставлять строку нетронутой. Благодарю за помощь. |
![]() |
![]() |
![]() |
#15 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]() Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#16 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Видимо, уважаемый IgorGO очень куда-то спешил.
1. При обращении к используемому диапазону рабочего листа, лист нужно указывать обязательно. Т.е. не просто UsedRange, а, например, ActiveSheet.UsedRange. Иначе будет ошибка. 2. Разделять операторы, записывая их в одну строку, знаком ":" можно, но не всегда. Так, например, нельзя использовать в одной строке For и If: For c = 1 To 6: If Cells(r, c) = "" Then n = n + 1: Next - будет ошибка. 3. При последовательном удалении строк, целесообразно запрещать изменение экрана: Application.ScreenUpdating = False Предлагаю другой вариант, в котором перебираются не все строки листа, а только те, в 5-м столбце (столбце "E") которых пусто. Причем, ячейки в этих строках вообще не перебираются (что существенно быстрее). Затем контролируем, есть ли еще пустые ячейки в таблице. И, если нет, то формируем диапазон строк листа для последующего удаления. Удаление всех полученных строк осуществляется с помощью 1-й команды. Поэтому, это, во-первых, существенно быстрее, во-вторых, запрещать изменение экрана ни к чему. Код:
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 26.01.2011 в 06:18. |
![]() |
![]() |
![]() |
#17 |
Регистрация: 25.01.2011
Сообщений: 4
|
![]()
Спасибо большое SAS888 и IgorGO за столь оперативную помощь! Воспользовался в итоге кодом SAS888. Очень помогло автоматизировать нудные операции
![]() Однако еще очень важный вопрос: возможно ли этот макрос модифицировать, чтобы он удалял строки с ячейками, в которой содержится только один тег <br> и далее пустота? Например в прикрепленной базе это строки с пустыми ячейками №58-61 и также строки №89-91. Заранее спасибо за помощь Последний раз редактировалось S63AMG; 26.01.2011 в 23:22. |
![]() |
![]() |
![]() |
#18 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
S63AMG, на сколько я понял, в 4-м столбце пустые значения и "0" считается равнозначным. Тогда можно так:
Код:
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
#19 |
Регистрация: 25.01.2011
Сообщений: 4
|
![]()
Хм, нет, уважаемый SAS888. Пустые значения и нули в 4 столбце вовсе не равнозначны
![]() Вот есть такое решение, работает верно: Код:
Последний раз редактировалось S63AMG; 27.01.2011 в 12:21. |
![]() |
![]() |
![]() |
#20 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Ну, значит я Вас не верно понял.
По поводу Вашего макроса: я бы не стал использовать CurrentRegion, т.к. если, например, в середине таблицы встретится пустая строка, то макрос отработает не верно. Надежнее заменить Код:
Код:
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Macros для нахождения и удаления слов | конгер | Microsoft Office Word | 1 | 13.10.2009 18:14 |
скрипт для удаления Cookies | mahnograd | Софт | 10 | 18.09.2009 08:53 |
отмена удаления строки: вопрос | Evgenii | БД в Delphi | 1 | 19.06.2009 01:43 |
Программа для удаления AutoRun вирусов | pomoshnic | Помощь студентам | 1 | 01.04.2009 04:57 |
Нужна программа для удаления содержимого папки | DNK1980 | Фриланс | 6 | 11.02.2008 16:52 |