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

Вход

Регистрация

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

 

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

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

Excel 2007
Здравствуйте!
По теме ссылок много, читал, но, поскольку только учусь, разобраться самостоятельно не получается.
Нужно удалить строки в которых месяц (в примере колонка В содержит только первое число каждого месяца) равен текущему.
Наваял следующий код. Почему он не работает знаний пока не хватает. Помогите, плз!
[vba]
Код
Sub del()
    Dim rng As Range, cmp As Date
    cmp = Format(Date, "mm.yy")
    With Worksheets("1").Range("B:B")
        Set rng = .Find(cmp, , LookIn:=xlValues, lookat:=xlWhole)
        If Not rng Is Nothing Then
            Do
                rng.EntireRow.Delete
                Set rng = .FindNext()
            Loop While Not rng Is Nothing
        End If
    End With
End Sub
[/vba]
К сообщению приложен файл: 7277769.xlsm (44.6 Kb)


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
СообщениеЗдравствуйте!
По теме ссылок много, читал, но, поскольку только учусь, разобраться самостоятельно не получается.
Нужно удалить строки в которых месяц (в примере колонка В содержит только первое число каждого месяца) равен текущему.
Наваял следующий код. Почему он не работает знаний пока не хватает. Помогите, плз!
[vba]
Код
Sub del()
    Dim rng As Range, cmp As Date
    cmp = Format(Date, "mm.yy")
    With Worksheets("1").Range("B:B")
        Set rng = .Find(cmp, , LookIn:=xlValues, lookat:=xlWhole)
        If Not rng Is Nothing Then
            Do
                rng.EntireRow.Delete
                Set rng = .FindNext()
            Loop While Not rng Is Nothing
        End If
    End With
End Sub
[/vba]

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

2019
С поиском дат вообще геморой...
Так отработало у меня:
[vba]
Код
Sub del()
    Dim rng As Range, cmp As Date
    cmp = Format(Date, "yy.mm.") & "01"
    With Worksheets("1").Range("B:B")
        Set rng = .Find(cmp, , LookIn:=xlFormulas, lookat:=xlWhole)
        If Not rng Is Nothing Then
            Do
                rng.EntireRow.Delete
                Set rng = .FindNext()
            Loop While Not rng Is Nothing
        End If
    End With
End Sub
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеС поиском дат вообще геморой...
Так отработало у меня:
[vba]
Код
Sub del()
    Dim rng As Range, cmp As Date
    cmp = Format(Date, "yy.mm.") & "01"
    With Worksheets("1").Range("B:B")
        Set rng = .Find(cmp, , LookIn:=xlFormulas, lookat:=xlWhole)
        If Not rng Is Nothing Then
            Do
                rng.EntireRow.Delete
                Set rng = .FindNext()
            Loop While Not rng Is Nothing
        End If
    End With
End Sub
[/vba]

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

Excel 2007
Hugo, А можете файл приложить? У меня ничего не происходит


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
СообщениеHugo, А можете файл приложить? У меня ничего не происходит

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

2003
Если правильно понял, нужно удалить строки с месяцем равным текущему, так?
[vba]
Код
Sub уд_тек_мес()
   Dim tm&, i&
   tm = Month(Date)
   For i = Range("B" & Rows.Count).End(xlUp).Row To 2 Step -1
     If Month(Cells(i, 2)) = tm Then Rows(i).Delete
   Next
End Sub
[/vba]
 
Ответить
СообщениеЕсли правильно понял, нужно удалить строки с месяцем равным текущему, так?
[vba]
Код
Sub уд_тек_мес()
   Dim tm&, i&
   tm = Month(Date)
   For i = Range("B" & Rows.Count).End(xlUp).Row To 2 Step -1
     If Month(Cells(i, 2)) = tm Then Rows(i).Delete
   Next
End Sub
[/vba]

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

2003; 2007; 2010; 2013 RUS
С годом
[vba]
Код
Sub tt()
    tm = Format(Date, "mm.yy")
    For i = Range("B" & Rows.Count).End(xlUp).Row To 2 Step -1
        If Format(Cells(i, 2), "mm.yy") = tm Then Rows(i).Delete
    Next
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеС годом
[vba]
Код
Sub tt()
    tm = Format(Date, "mm.yy")
    For i = Range("B" & Rows.Count).End(xlUp).Row To 2 Step -1
        If Format(Cells(i, 2), "mm.yy") = tm Then Rows(i).Delete
    Next
End Sub
[/vba]

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

2003
С годом
Про год не упоминалось! :)
ЗЫ Да, заметил, в его коде.


Сообщение отредактировал Wasilic - Вторник, 19.01.2016, 13:13
 
Ответить
Сообщение
С годом
Про год не упоминалось! :)
ЗЫ Да, заметил, в его коде.

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

2019
Перебор не лучший вариант - может там 100000 строк, а удалить нужно всего пару? Поиск будет намного быстрее.
Файл приложить не могу.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПеребор не лучший вариант - может там 100000 строк, а удалить нужно всего пару? Поиск будет намного быстрее.
Файл приложить не могу.

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

2003
может там 100000 строк
Может быть, но ТС об этом умалчивает!
 
Ответить
Сообщение
может там 100000 строк
Может быть, но ТС об этом умалчивает!

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

2019
Да, может быть и наоборот :)


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеДа, может быть и наоборот :)

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

Excel 2007
Стоит сходить пообедать, а тут уже накидали... :D
Wasilic, _Boroda_, ваши коды работают. Спасибо большое! Строк в оригинальном файле 400-500 тыс. Сейчас затестирую


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
СообщениеСтоит сходить пообедать, а тут уже накидали... :D
Wasilic, _Boroda_, ваши коды работают. Спасибо большое! Строк в оригинальном файле 400-500 тыс. Сейчас затестирую

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

2019
ейчас затестирую

можно запустить и идти обедать снова... :(


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение
ейчас затестирую

можно запустить и идти обедать снова... :(

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

2003
Строк в оригинальном файле 400-500 тыс.
можно запустить и идти обедать снова..

Да уж, я у кого то подпись видел: - "Правильно поставленная задача, это уже половина решения".


Сообщение отредактировал Wasilic - Вторник, 19.01.2016, 13:48
 
Ответить
Сообщение
Строк в оригинальном файле 400-500 тыс.
можно запустить и идти обедать снова..

Да уж, я у кого то подпись видел: - "Правильно поставленная задача, это уже половина решения".

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

2003; 2007; 2010; 2013 RUS
Строк в оригинальном файле 400-500 тыс

Это меняет дело. Тогда лучше отсортировать по столбцу В так, чтобы удаляемые строки оказались в самом низу и все их скопом удалить.
Есть даты, меньшие 01/01/2016?


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

Это меняет дело. Тогда лучше отсортировать по столбцу В так, чтобы удаляемые строки оказались в самом низу и все их скопом удалить.
Есть даты, меньшие 01/01/2016?

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

Excel 2007
Да, я уже понял. Код Wasilic, отработал 3 мин и я его прервал - нет смысла. Код _Boroda_, закончил работать за 20 секунд. В файле 453 тыс. строк. Александр - респект. Василич - тоже плюсую ))


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
СообщениеДа, я уже понял. Код Wasilic, отработал 3 мин и я его прервал - нет смысла. Код _Boroda_, закончил работать за 20 секунд. В файле 453 тыс. строк. Александр - респект. Василич - тоже плюсую ))

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

Excel 2007
К слову сказать. В другом файле, другой отбор но я делал фильтр по условию и тупо удалял строки. Реализовывалось за 2-3 секунды. Думаю и тут стоит попробовать


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
СообщениеК слову сказать. В другом файле, другой отбор но я делал фильтр по условию и тупо удалял строки. Реализовывалось за 2-3 секунды. Думаю и тут стоит попробовать

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

Excel 2007
Есть даты, меньшие 01/01/2016?
Да, у меня БД с 2013 года и с планами до 2018.


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
Сообщение
Есть даты, меньшие 01/01/2016?
Да, у меня БД с 2013 года и с планами до 2018.

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

Excel 2007
"Правильно поставленная задача
А тут по сути две задачи: удалить строки и научиться. Удалить то я могу и несколькими способами, получается основная была научиться. В итоге я получил два алгоритма. Понял их слабые и сильные стороны и намотал на ус. И за это моя глубочайшая признательность и благодарность.


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
Сообщение
"Правильно поставленная задача
А тут по сути две задачи: удалить строки и научиться. Удалить то я могу и несколькими способами, получается основная была научиться. В итоге я получил два алгоритма. Понял их слабые и сильные стороны и намотал на ус. И за это моя глубочайшая признательность и благодарность.

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

2003; 2007; 2010; 2013 RUS
Я иногда в подобных случаях делаю так: в ближайшем свободном столбце пишу что-то типа =ЕСЛИ(В2=42370;1;) и сортирую всю таблицу по этому столбцу по возрастанию. Нахожу первую единичку и удаляю все строки от нее до последней заполненной строки. Потом вспомогательный столбец удаляю. Конечно же, все это можно и макросом написать.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЯ иногда в подобных случаях делаю так: в ближайшем свободном столбце пишу что-то типа =ЕСЛИ(В2=42370;1;) и сортирую всю таблицу по этому столбцу по возрастанию. Нахожу первую единичку и удаляю все строки от нее до последней заполненной строки. Потом вспомогательный столбец удаляю. Конечно же, все это можно и макросом написать.

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

2019
Поиском наладьте - может будет за пару секунд отрабатывать. У меня ведь работает!


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПоиском наладьте - может будет за пару секунд отрабатывать. У меня ведь работает!

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

Excel 2007
Коряво, но вот так у меня работает в другом файле
[vba]
Код
        Range("$A:$Q").AutoFilter Field:=3, Criteria1:="<>*" & Range("S5") & "*"
        Range("A6").Select
        Range(Selection, Selection.End(xlDown)).EntireRow.Delete
        Range("$A:$Q").AutoFilter Field:=3
[/vba]
работает 2-3 сек


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


Сообщение отредактировал pabchek - Вторник, 19.01.2016, 14:03
 
Ответить
СообщениеКоряво, но вот так у меня работает в другом файле
[vba]
Код
        Range("$A:$Q").AutoFilter Field:=3, Criteria1:="<>*" & Range("S5") & "*"
        Range("A6").Select
        Range(Selection, Selection.End(xlDown)).EntireRow.Delete
        Range("$A:$Q").AutoFilter Field:=3
[/vba]
работает 2-3 сек

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

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