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

Вход

Регистрация

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

 

= Мир MS Excel/Удалить строки по условию - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить строки по условию (Макросы/Sub)
Удалить строки по условию
pabchek Дата: Вторник, 19.01.2016, 14:04 | Сообщение № 21
Группа: Проверенные
Ранг: Ветеран
Сообщений: 931
Репутация: 218 ±
Замечаний: 0% ±

Excel 2007
Поиском наладьте
Это из 2-го сообщения?


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
Сообщение
Поиском наладьте
Это из 2-го сообщения?

Автор - pabchek
Дата добавления - 19.01.2016 в 14:04
Hugo Дата: Вторник, 19.01.2016, 14:05 | Сообщение № 22
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3250
Репутация: 707 ±
Замечаний: 0% ±

2019
Да.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеДа.

Автор - Hugo
Дата добавления - 19.01.2016 в 14:05
pabchek Дата: Вторник, 19.01.2016, 14:06 | Сообщение № 23
Группа: Проверенные
Ранг: Ветеран
Сообщений: 931
Репутация: 218 ±
Замечаний: 0% ±

Excel 2007
Наладил. Время работы 1 секунда!!!!!!!!!!!!!
Рано обрадовался. Не наладил. Как налаживать если это и было темой - не умею я...


"Учиться, учиться и еще раз учиться!"
WM: R399923528092


Сообщение отредактировал pabchek - Вторник, 19.01.2016, 14:10
 
Ответить
СообщениеНаладил. Время работы 1 секунда!!!!!!!!!!!!!
Рано обрадовался. Не наладил. Как налаживать если это и было темой - не умею я...

Автор - pabchek
Дата добавления - 19.01.2016 в 14:06
Hugo Дата: Вторник, 19.01.2016, 14:08 | Сообщение № 24
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3250
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну вот!
Конечно если из этой кучи нужно удалять половину - тогда что поиск, что перебор... А если пару строк - то однозначно поиск рулит.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу вот!
Конечно если из этой кучи нужно удалять половину - тогда что поиск, что перебор... А если пару строк - то однозначно поиск рулит.

Автор - Hugo
Дата добавления - 19.01.2016 в 14:08
SLAVICK Дата: Вторник, 19.01.2016, 14:41 | Сообщение № 25
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Тут вопрос удаления большого количества строк - давно решили (См 11-й пост.) :D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеТут вопрос удаления большого количества строк - давно решили (См 11-й пост.) :D

Автор - SLAVICK
Дата добавления - 19.01.2016 в 14:41
pabchek Дата: Вторник, 19.01.2016, 14:57 | Сообщение № 26
Группа: Проверенные
Ранг: Ветеран
Сообщений: 931
Репутация: 218 ±
Замечаний: 0% ±

Excel 2007
См 11-й пост
Воооо... похоже. Щас буду делать под себя. Спасибо!


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
Сообщение
См 11-й пост
Воооо... похоже. Щас буду делать под себя. Спасибо!

Автор - pabchek
Дата добавления - 19.01.2016 в 14:57
Wasilich Дата: Вторник, 19.01.2016, 15:09 | Сообщение № 27
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
А вот у меня вопрос, можно ли для решения этой задачи, по ускорению процесса удаления строк, отфильтровать даты только по месяцу и по году, без учета дней?
Если да, то удалить видимые строки можно кодом
[vba]
Код
SpecialCells(xlCellTypeVisible).EntireRow.Delete xlUp
[/vba]и наверное так будет быстрее. ИМХО.


Сообщение отредактировал Wasilic - Вторник, 19.01.2016, 15:10
 
Ответить
СообщениеА вот у меня вопрос, можно ли для решения этой задачи, по ускорению процесса удаления строк, отфильтровать даты только по месяцу и по году, без учета дней?
Если да, то удалить видимые строки можно кодом
[vba]
Код
SpecialCells(xlCellTypeVisible).EntireRow.Delete xlUp
[/vba]и наверное так будет быстрее. ИМХО.

Автор - Wasilich
Дата добавления - 19.01.2016 в 15:09
SLAVICK Дата: Вторник, 19.01.2016, 15:16 | Сообщение № 28
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
и наверное так будет быстрее. ИМХО.

Wasilic быстрее чем что?
Если чем сортировка - то на больших объемах:
при таком подходе споткнетесь с лимитом xlCellTypeVisible
Во вторых не будет быстрее чем сортировка - я проходил эти моменты. B)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
и наверное так будет быстрее. ИМХО.

Wasilic быстрее чем что?
Если чем сортировка - то на больших объемах:
при таком подходе споткнетесь с лимитом xlCellTypeVisible
Во вторых не будет быстрее чем сортировка - я проходил эти моменты. B)

Автор - SLAVICK
Дата добавления - 19.01.2016 в 15:16
_Boroda_ Дата: Вторник, 19.01.2016, 16:32 | Сообщение № 29
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Василич, давай представим, что нам нужно удалить строки с номерами 3 и 5, а всего у нас их 6 вместе с шапкой. Вот мы отфильтровали по критерию, получили видимыми шапку и строки 3 и 5. Выделили только их и сказали "удалить строки". Что имеем? Excel работает сверху вниз, правильно? Тогда он сначала удалит строку 3, затем сместится вверх на одну строку все, что было ниже удаленной строки, затем удалится строка 4 (бывшая строка 5), затем сместится все то, что было ниже. Для нескольких строк - фигня, а вот для многих строк, не расположенных рядом, это очень замедляет. А особенно в том случае, когда есть раскрашенные границы ячеек и прочее форматирование.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВасилич, давай представим, что нам нужно удалить строки с номерами 3 и 5, а всего у нас их 6 вместе с шапкой. Вот мы отфильтровали по критерию, получили видимыми шапку и строки 3 и 5. Выделили только их и сказали "удалить строки". Что имеем? Excel работает сверху вниз, правильно? Тогда он сначала удалит строку 3, затем сместится вверх на одну строку все, что было ниже удаленной строки, затем удалится строка 4 (бывшая строка 5), затем сместится все то, что было ниже. Для нескольких строк - фигня, а вот для многих строк, не расположенных рядом, это очень замедляет. А особенно в том случае, когда есть раскрашенные границы ячеек и прочее форматирование.

Автор - _Boroda_
Дата добавления - 19.01.2016 в 16:32
Wasilich Дата: Вторник, 19.01.2016, 17:39 | Сообщение № 30
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
давай представим, что нам нужно удалить строки... . Вот мы отфильтровали по критерию

Саша, а давай лучше проверим! :)
К сообщению приложен файл: 4783127.xls (23.0 Kb)
 
Ответить
Сообщение
давай представим, что нам нужно удалить строки... . Вот мы отфильтровали по критерию

Саша, а давай лучше проверим! :)

Автор - Wasilich
Дата добавления - 19.01.2016 в 17:39
_Boroda_ Дата: Вторник, 19.01.2016, 17:59 | Сообщение № 31
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Чет я наверное не понимаю. И что?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЧет я наверное не понимаю. И что?

Автор - _Boroda_
Дата добавления - 19.01.2016 в 17:59
Wasilich Дата: Вторник, 19.01.2016, 18:15 | Сообщение № 32
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
И что?
Ну как "И что?". Фильтр выбрал строки с данными по условию. Они остались видимые, а макрос их (видимые) удалил одним махом и все.
Для нескольких строк - фигня, а вот для многих строк, не расположенных рядом, это очень замедляет
Ты имеешь ввиду, этот код замедляет?
[vba]
Код
ActiveSheet.Range("D2:D" & S).SpecialCells(xlCellTypeVisible).EntireRow.Delete xlUp
[/vba]может быть. Не знаю, у меня нету 400000 строк. Он что, тоже работает циклом?


Сообщение отредактировал Wasilic - Вторник, 19.01.2016, 18:36
 
Ответить
Сообщение
И что?
Ну как "И что?". Фильтр выбрал строки с данными по условию. Они остались видимые, а макрос их (видимые) удалил одним махом и все.
Для нескольких строк - фигня, а вот для многих строк, не расположенных рядом, это очень замедляет
Ты имеешь ввиду, этот код замедляет?
[vba]
Код
ActiveSheet.Range("D2:D" & S).SpecialCells(xlCellTypeVisible).EntireRow.Delete xlUp
[/vba]может быть. Не знаю, у меня нету 400000 строк. Он что, тоже работает циклом?

Автор - Wasilich
Дата добавления - 19.01.2016 в 18:15
SLAVICK Дата: Вторник, 19.01.2016, 18:35 | Сообщение № 33
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Wasilic, Вы читали по моей ссылке?
По факту не нужно 400000, чтобы xlCellTypeVisible - выдал ошибку:
Цитата
The only problem is that there is a limit of 8192 areas that it can handle

этот код замедляет?

Да будет удалятся на порядок дольше при больших объемах. ;)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеWasilic, Вы читали по моей ссылке?
По факту не нужно 400000, чтобы xlCellTypeVisible - выдал ошибку:
Цитата
The only problem is that there is a limit of 8192 areas that it can handle

этот код замедляет?

Да будет удалятся на порядок дольше при больших объемах. ;)

Автор - SLAVICK
Дата добавления - 19.01.2016 в 18:35
Wasilich Дата: Вторник, 19.01.2016, 18:44 | Сообщение № 34
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Уговорили! Жаль проверить не могу самостоятельно на 400000! Хотя видимых останется всего то..., если будет выбран один месяц и один год. Тем более, что какой то месяц в списке не будет разбросан с первой до последней строки. Это надо узнать у pabchekа. :)


Сообщение отредактировал Wasilic - Вторник, 19.01.2016, 18:48
 
Ответить
СообщениеУговорили! Жаль проверить не могу самостоятельно на 400000! Хотя видимых останется всего то..., если будет выбран один месяц и один год. Тем более, что какой то месяц в списке не будет разбросан с первой до последней строки. Это надо узнать у pabchekа. :)

Автор - Wasilich
Дата добавления - 19.01.2016 в 18:44
SLAVICK Дата: Вторник, 19.01.2016, 19:00 | Сообщение № 35
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Жаль проверить не могу самостоятельно на 400000

Ну чего же не можете - вот пример на 200 000 :D
Откройте - нажмите "Создать примеров" - потом запустите мой код.
Потом - - нажмите "Создать примеров" - потом запустите Ваш код. ;)
перевложил файл
К сообщению приложен файл: 4783127-1-.xlsm (22.4 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Жаль проверить не могу самостоятельно на 400000

Ну чего же не можете - вот пример на 200 000 :D
Откройте - нажмите "Создать примеров" - потом запустите мой код.
Потом - - нажмите "Создать примеров" - потом запустите Ваш код. ;)
перевложил файл

Автор - SLAVICK
Дата добавления - 19.01.2016 в 19:00
RAN Дата: Вторник, 19.01.2016, 19:26 | Сообщение № 36
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Откройте - нажмите

2003 не треснет? :p


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Откройте - нажмите

2003 не треснет? :p

Автор - RAN
Дата добавления - 19.01.2016 в 19:26
Wasilich Дата: Вторник, 19.01.2016, 19:29 | Сообщение № 37
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
2003 не треснет?
lol lol lol
 
Ответить
Сообщение
2003 не треснет?
lol lol lol

Автор - Wasilich
Дата добавления - 19.01.2016 в 19:29
_Boroda_ Дата: Вторник, 19.01.2016, 19:35 | Сообщение № 38
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Ну как "И что?". Фильтр выбрал строки с данными по условию. Они остались видимые, а макрос их (видимые) удалил одним махом и все.

Да это-то понятно. Только вот не все одним махом он удалил, а по очереди. Предположу, что по Arial. То есть если нужно удалить строки 3-6 и 8-9, то удаляет сначала 3-6, перемещает все, затем удаляет те, которые раньше были 8-9. Возможно, метку какую-то ставит.
Иначе не было бы разницы в скорости удаления 30000 строк подряд и 30000 строк через одну.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Ну как "И что?". Фильтр выбрал строки с данными по условию. Они остались видимые, а макрос их (видимые) удалил одним махом и все.

Да это-то понятно. Только вот не все одним махом он удалил, а по очереди. Предположу, что по Arial. То есть если нужно удалить строки 3-6 и 8-9, то удаляет сначала 3-6, перемещает все, затем удаляет те, которые раньше были 8-9. Возможно, метку какую-то ставит.
Иначе не было бы разницы в скорости удаления 30000 строк подряд и 30000 строк через одну.

Автор - _Boroda_
Дата добавления - 19.01.2016 в 19:35
Udik Дата: Вторник, 19.01.2016, 19:40 | Сообщение № 39
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
сначала 3-6, перемещает все,...Возможно, метку какую-то ставит

А может он снизу удаляет?


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Вторник, 19.01.2016, 19:48
 
Ответить
Сообщение
сначала 3-6, перемещает все,...Возможно, метку какую-то ставит

А может он снизу удаляет?

Автор - Udik
Дата добавления - 19.01.2016 в 19:40
SLAVICK Дата: Вторник, 19.01.2016, 21:10 | Сообщение № 40
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
2003 не треснет?

НН-да как-то не посмотрел.
Ну тогда для 2003 :D : [vba]
Код
Sub SLAVICK()
t = Timer
With ActiveSheet
    .AutoFilter.Sort.SortFields.Add Key:=Range( _
        "D2:" & s), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With .AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    from_ = Columns("D:D").Find(What:="1", After:=[d1], LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Row
    to_ = Columns("D:D").Find(What:="2", After:=[d1], LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Row - 1
     .Rows(from_ & ":" & to_).Delete xlUp
End With
[j1] = Timer - t
End Sub
[/vba]
К сообщению приложен файл: 4783127-1-1-.xls (41.5 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
2003 не треснет?

НН-да как-то не посмотрел.
Ну тогда для 2003 :D : [vba]
Код
Sub SLAVICK()
t = Timer
With ActiveSheet
    .AutoFilter.Sort.SortFields.Add Key:=Range( _
        "D2:" & s), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With .AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    from_ = Columns("D:D").Find(What:="1", After:=[d1], LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Row
    to_ = Columns("D:D").Find(What:="2", After:=[d1], LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Row - 1
     .Rows(from_ & ":" & to_).Delete xlUp
End With
[j1] = Timer - t
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 19.01.2016 в 21:10
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить строки по условию (Макросы/Sub)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

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