Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удаление строк без перебора. - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление строк без перебора. (Макросы/Sub)
Удаление строк без перебора.
enchanter54 Дата: Четверг, 17.03.2016, 13:40 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
Привет всем! Ребят, есть макрос который перебирает каждую строку по значению в определенном столбце и удаляет строку если нет значение в этом столбце. Это не очень удобно когда у тебя уже 20 000 строк - долго очень. Я часто пользуюсь фильтрами, поэтому можно ли написать макрос, который определил бы скажем в столбце L самое нижнее значение , а все что ниже строки тупо удалил?
 
Ответить
СообщениеПривет всем! Ребят, есть макрос который перебирает каждую строку по значению в определенном столбце и удаляет строку если нет значение в этом столбце. Это не очень удобно когда у тебя уже 20 000 строк - долго очень. Я часто пользуюсь фильтрами, поэтому можно ли написать макрос, который определил бы скажем в столбце L самое нижнее значение , а все что ниже строки тупо удалил?

Автор - enchanter54
Дата добавления - 17.03.2016 в 13:40
devilkurs Дата: Четверг, 17.03.2016, 13:52 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
У Вас же есть уже ответ, только Вы не хотите подумать немного и проанализировать. И воспользоваться макрорекодром

[vba]
Код
Rows(Cells(Rows.Count, 12).End(xlUp).Row + 1 & ":65000").Delete Shift:=xlUp
[/vba]
Удалит с последней заполненной ячейки по столбцу L +1 до строки 65000.


 
Ответить
СообщениеУ Вас же есть уже ответ, только Вы не хотите подумать немного и проанализировать. И воспользоваться макрорекодром

[vba]
Код
Rows(Cells(Rows.Count, 12).End(xlUp).Row + 1 & ":65000").Delete Shift:=xlUp
[/vba]
Удалит с последней заполненной ячейки по столбцу L +1 до строки 65000.

Автор - devilkurs
Дата добавления - 17.03.2016 в 13:52
devilkurs Дата: Четверг, 17.03.2016, 13:56 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
А для скорости работы макроса, который у Вас (я не видел, просто предполагаю) реализацию надо через массив делать и + отключать обновление экрана и пересчет формул.

akobir hands


 
Ответить
СообщениеА для скорости работы макроса, который у Вас (я не видел, просто предполагаю) реализацию надо через массив делать и + отключать обновление экрана и пересчет формул.

akobir hands

Автор - devilkurs
Дата добавления - 17.03.2016 в 13:56
enchanter54 Дата: Четверг, 17.03.2016, 13:57 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
devilkurs, спасибо бро, просто я офисный чайник))) который не очень волочет в макросах. Если можно напишите макрос полностью, плизз))
[moder]А более подробных ответов без файла Вы и не дождетесь[/moder]


Сообщение отредактировал Manyasha - Четверг, 17.03.2016, 14:02
 
Ответить
Сообщениеdevilkurs, спасибо бро, просто я офисный чайник))) который не очень волочет в макросах. Если можно напишите макрос полностью, плизз))
[moder]А более подробных ответов без файла Вы и не дождетесь[/moder]

Автор - enchanter54
Дата добавления - 17.03.2016 в 13:57
enchanter54 Дата: Четверг, 17.03.2016, 14:00 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
devilkurs, Не, именно чтоб нашел последнее значение и тупо удалил все строки что ниже, до 65000 вполне подходит, столько точно не наберется.
 
Ответить
Сообщениеdevilkurs, Не, именно чтоб нашел последнее значение и тупо удалил все строки что ниже, до 65000 вполне подходит, столько точно не наберется.

Автор - enchanter54
Дата добавления - 17.03.2016 в 14:00
devilkurs Дата: Четверг, 17.03.2016, 14:04 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
Я тоже офисный. Бухгалтер. Но я понял что оооочень помогает знание VBA в среде Word и Excel - изучаю, читаю.... За последние полтора года написал кучу макросов, теперь за полдня свои обязанности выполняю- остальное балду пинаю.

Так макрос готов, только не определен:
[vba]
Код

Sub УдалениеСтрок ()
Rows(Cells(Rows.Count, 12).End(xlUp).Row + 1 & ":65000").Delete Shift:=xlUp
end sub
[/vba]
Осталось нарисовать кнопку и привязать макрос

[offtop] согласен с Manyasha




Сообщение отредактировал devilkurs - Четверг, 17.03.2016, 14:06
 
Ответить
СообщениеЯ тоже офисный. Бухгалтер. Но я понял что оооочень помогает знание VBA в среде Word и Excel - изучаю, читаю.... За последние полтора года написал кучу макросов, теперь за полдня свои обязанности выполняю- остальное балду пинаю.

Так макрос готов, только не определен:
[vba]
Код

Sub УдалениеСтрок ()
Rows(Cells(Rows.Count, 12).End(xlUp).Row + 1 & ":65000").Delete Shift:=xlUp
end sub
[/vba]
Осталось нарисовать кнопку и привязать макрос

[offtop] согласен с Manyasha

Автор - devilkurs
Дата добавления - 17.03.2016 в 14:04
enchanter54 Дата: Четверг, 17.03.2016, 14:04 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
devilkurs, это я смогу)))) Спасибо большое!
 
Ответить
Сообщениеdevilkurs, это я смогу)))) Спасибо большое!

Автор - enchanter54
Дата добавления - 17.03.2016 в 14:04
devilkurs Дата: Четверг, 17.03.2016, 14:09 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
Удалено
[moder]Нехорошо так! devilkurs, прочитайте п 5p Правил форума.[/moder]




Сообщение отредактировал Manyasha - Четверг, 17.03.2016, 14:15
 
Ответить
СообщениеУдалено
[moder]Нехорошо так! devilkurs, прочитайте п 5p Правил форума.[/moder]

Автор - devilkurs
Дата добавления - 17.03.2016 в 14:09
enchanter54 Дата: Четверг, 17.03.2016, 14:14 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
devilkurs, уже)
 
Ответить
Сообщениеdevilkurs, уже)

Автор - enchanter54
Дата добавления - 17.03.2016 в 14:14
devilkurs Дата: Четверг, 17.03.2016, 14:18 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
[offtop] прости Manyasha. Накипело. Это ни в коем случае не выклянчивание и не претензия к enchanter54

enchanter54, спасибо ))))


 
Ответить
Сообщение[offtop] прости Manyasha. Накипело. Это ни в коем случае не выклянчивание и не претензия к enchanter54

enchanter54, спасибо ))))

Автор - devilkurs
Дата добавления - 17.03.2016 в 14:18
enchanter54 Дата: Четверг, 17.03.2016, 14:27 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
devilkurs, я считаю всё нормально, нуб я и все бывают нубами до поры до времени. Даже не знал, что можно + поставить, как-то не обратил внимание, теперь знаю)))
[moder]Отсюда я делаю вывод, что Правила форума Вы так и не прочитали.


Сообщение отредактировал _Boroda_ - Четверг, 17.03.2016, 14:33
 
Ответить
Сообщениеdevilkurs, я считаю всё нормально, нуб я и все бывают нубами до поры до времени. Даже не знал, что можно + поставить, как-то не обратил внимание, теперь знаю)))
[moder]Отсюда я делаю вывод, что Правила форума Вы так и не прочитали.

Автор - enchanter54
Дата добавления - 17.03.2016 в 14:27
Wasilich Дата: Четверг, 17.03.2016, 14:36 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1195
Репутация: 316 ±
Замечаний: 0% ±

2003
Хорош флудить, ближе к делу. Вот нашел в заначке. Сам не проверял.
[vba]
Код
Sub ttt()
On Error Resume Next
ActiveSheet.UsedRange.Columns(8).SpecialCells(4).EntireRow.Delete
End Sub
[/vba]SpecialCells(4) или SpecialCells(xlCellTypeBlanks) - это все пустые ячейки в диапазоне
ActiveSheet - на активном листе
UsedRange - в используемом диапазоне (т.е. не весь лист, а только использ. диапазон)
Columns(8) - в столбце 8
SpecialCells(4) - выбираем пустые ячейки
EntireRow.Delete - для выбранных ячеек удаляем строку целиком
 
Ответить
СообщениеХорош флудить, ближе к делу. Вот нашел в заначке. Сам не проверял.
[vba]
Код
Sub ttt()
On Error Resume Next
ActiveSheet.UsedRange.Columns(8).SpecialCells(4).EntireRow.Delete
End Sub
[/vba]SpecialCells(4) или SpecialCells(xlCellTypeBlanks) - это все пустые ячейки в диапазоне
ActiveSheet - на активном листе
UsedRange - в используемом диапазоне (т.е. не весь лист, а только использ. диапазон)
Columns(8) - в столбце 8
SpecialCells(4) - выбираем пустые ячейки
EntireRow.Delete - для выбранных ячеек удаляем строку целиком

Автор - Wasilich
Дата добавления - 17.03.2016 в 14:36
_Boroda_ Дата: Четверг, 17.03.2016, 14:43 | Сообщение № 13
Группа: Модераторы
Ранг: Экселист
Сообщений: 10334
Репутация: 4357 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Василич, не учи людей плохому - у ТС 20000 строк, а SpecialCells(xlCellTypeBlanks) работает чуть больше, чем с 8 тыс. ареалов. Вполне можно налететь. Кстати, я таким образом, помнится, лет 6 назад очень здорово доходность посчитал, а заметил уже после того, как начальству отдал. Хорошо, что больше не заметил никто.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВасилич, не учи людей плохому - у ТС 20000 строк, а SpecialCells(xlCellTypeBlanks) работает чуть больше, чем с 8 тыс. ареалов. Вполне можно налететь. Кстати, я таким образом, помнится, лет 6 назад очень здорово доходность посчитал, а заметил уже после того, как начальству отдал. Хорошо, что больше не заметил никто.

Автор - _Boroda_
Дата добавления - 17.03.2016 в 14:43
akobir Дата: Четверг, 17.03.2016, 14:49 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 161
Репутация: 9 ±
Замечаний: 0% ±

Excel 2010
Я бы ввел две переменные.
Одну - последняя строка по столбцу L,
Другая - последняя строка по столбцу, который заполняется до конца.

После - удалить весь массив между переменными.


e-mail: akobir.ismailov@gmail.com
 
Ответить
СообщениеЯ бы ввел две переменные.
Одну - последняя строка по столбцу L,
Другая - последняя строка по столбцу, который заполняется до конца.

После - удалить весь массив между переменными.

Автор - akobir
Дата добавления - 17.03.2016 в 14:49
Wasilich Дата: Четверг, 17.03.2016, 14:57 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1195
Репутация: 316 ±
Замечаний: 0% ±

2003
не учи людей плохому - у ТС 20000 строк
Плохо это или хорошо, пусть проверяет. Это тоже вариант в соответствии с названием темы.
Просто я
нашел в заначке. Сам не проверял.
И пусть тоже положит в заначку. Вдруг пригодится для 20-ти строк. :D
[p.s.]Специально набрал 20 000 строк с каждой 5-й пустой и протестировал - 27 сек. на моем старичке. Это много, если эту операцию производить каждую минуту. :D [/p.s.]


Сообщение отредактировал Wasilich - Четверг, 17.03.2016, 15:33
 
Ответить
Сообщение
не учи людей плохому - у ТС 20000 строк
Плохо это или хорошо, пусть проверяет. Это тоже вариант в соответствии с названием темы.
Просто я
нашел в заначке. Сам не проверял.
И пусть тоже положит в заначку. Вдруг пригодится для 20-ти строк. :D
[p.s.]Специально набрал 20 000 строк с каждой 5-й пустой и протестировал - 27 сек. на моем старичке. Это много, если эту операцию производить каждую минуту. :D [/p.s.]

Автор - Wasilich
Дата добавления - 17.03.2016 в 14:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление строк без перебора. (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!