|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.12.2010, 16:57 | #11 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
а все равно надо будет "скучным" циклом по всему пройтись (см. Do ... Loop) с помощью Union собрать в один диапазон
а потом уже весело одной командой удалить. вот скучный цикл делает то что написано в названии. Код:
затрудняюсь сказать вообще вы уловите разницу в продолжительности работы этих процедур при удалении 1000 строк, не говоря о 10-20 штуках.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
11.12.2010, 12:57 | #12 | ||
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Цитата:
Цитата:
Код:
P.S. Забыл пояснить, что если в одной строке диапазона найдется несколько пустых ячеек, то использовать ...SpecialCells(xlCellTypeBlanks).E ntireRow.Delete не получится, т.к. данная команда неприменима к пересекающимся диапазонам. Именно поэтому в коде применено получение нового "чистого" диапазона с помощью Intersect...
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 11.12.2010 в 13:04. Причина: Добавлено |
||
11.12.2010, 21:58 | #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 |
25.01.2011, 22:17 | #14 |
Регистрация: 25.01.2011
Сообщений: 4
|
Здравствуйте!
Пожалуйста помогите сделать макрос для "производственных задач" Дано: массив - 6 столбцов, около 1000 строк. Задача макроса: удалять строки, в которых есть только одна пустая ячейка (она всегда находится в 5 столбце). Если же в строке больше чем 1 пустая ячейка (например 2 рядом) - оставлять строку нетронутой. Благодарю за помощь. |
25.01.2011, 22:34 | #15 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
26.01.2011, 06:03 | #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. |
26.01.2011, 08:26 | #17 |
Регистрация: 25.01.2011
Сообщений: 4
|
Благодарность
Спасибо большое SAS888 и IgorGO за столь оперативную помощь! Воспользовался в итоге кодом SAS888. Очень помогло автоматизировать нудные операции
Однако еще очень важный вопрос: возможно ли этот макрос модифицировать, чтобы он удалял строки с ячейками, в которой содержится только один тег <br> и далее пустота? Например в прикрепленной базе это строки с пустыми ячейками №58-61 и также строки №89-91. Заранее спасибо за помощь Последний раз редактировалось S63AMG; 26.01.2011 в 23:22. |
27.01.2011, 08:54 | #18 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
S63AMG, на сколько я понял, в 4-м столбце пустые значения и "0" считается равнозначным. Тогда можно так:
Код:
Чем шире угол зрения, тем он тупее.
|
27.01.2011, 12:19 | #19 |
Регистрация: 25.01.2011
Сообщений: 4
|
Хм, нет, уважаемый SAS888. Пустые значения и нули в 4 столбце вовсе не равнозначны Привязки содержимого ячейки (с одним тегом) из 5 столбца к содержимому соседней ячейки нет никакой. т.е. смело можно удалять строки в которых соседствуют ячейки с тегом и ячейки 4-го столбца с любыми числами от 0 до R.
Вот есть такое решение, работает верно: Код:
Последний раз редактировалось S63AMG; 27.01.2011 в 12:21. |
27.01.2011, 12:58 | #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 |