Здравствуйте! По теме ссылок много, читал, но, поскольку только учусь, разобраться самостоятельно не получается. Нужно удалить строки в которых месяц (в примере колонка В содержит только первое число каждого месяца) равен текущему. Наваял следующий код. Почему он не работает знаний пока не хватает. Помогите, плз! [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]
Здравствуйте! По теме ссылок много, читал, но, поскольку только учусь, разобраться самостоятельно не получается. Нужно удалить строки в которых месяц (в примере колонка В содержит только первое число каждого месяца) равен текущему. Наваял следующий код. Почему он не работает знаний пока не хватает. Помогите, плз! [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]
Код
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]
С поиском дат вообще геморой... Так отработало у меня: [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]
Код
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
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]
С годом [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
Стоит сходить пообедать, а тут уже накидали... Wasilic, _Boroda_, ваши коды работают. Спасибо большое! Строк в оригинальном файле 400-500 тыс. Сейчас затестирую
Стоит сходить пообедать, а тут уже накидали... Wasilic, _Boroda_, ваши коды работают. Спасибо большое! Строк в оригинальном файле 400-500 тыс. Сейчас затестируюpabchek
"Учиться, учиться и еще раз учиться!" WM: R399923528092
Это меняет дело. Тогда лучше отсортировать по столбцу В так, чтобы удаляемые строки оказались в самом низу и все их скопом удалить. Есть даты, меньшие 01/01/2016?
Это меняет дело. Тогда лучше отсортировать по столбцу В так, чтобы удаляемые строки оказались в самом низу и все их скопом удалить. Есть даты, меньшие 01/01/2016?_Boroda_
Да, я уже понял. Код Wasilic, отработал 3 мин и я его прервал - нет смысла. Код _Boroda_, закончил работать за 20 секунд. В файле 453 тыс. строк. Александр - респект. Василич - тоже плюсую ))
Да, я уже понял. Код Wasilic, отработал 3 мин и я его прервал - нет смысла. Код _Boroda_, закончил работать за 20 секунд. В файле 453 тыс. строк. Александр - респект. Василич - тоже плюсую ))pabchek
"Учиться, учиться и еще раз учиться!" WM: R399923528092
К слову сказать. В другом файле, другой отбор но я делал фильтр по условию и тупо удалял строки. Реализовывалось за 2-3 секунды. Думаю и тут стоит попробовать
К слову сказать. В другом файле, другой отбор но я делал фильтр по условию и тупо удалял строки. Реализовывалось за 2-3 секунды. Думаю и тут стоит попробоватьpabchek
"Учиться, учиться и еще раз учиться!" WM: R399923528092
А тут по сути две задачи: удалить строки и научиться. Удалить то я могу и несколькими способами, получается основная была научиться. В итоге я получил два алгоритма. Понял их слабые и сильные стороны и намотал на ус. И за это моя глубочайшая признательность и благодарность.
А тут по сути две задачи: удалить строки и научиться. Удалить то я могу и несколькими способами, получается основная была научиться. В итоге я получил два алгоритма. Понял их слабые и сильные стороны и намотал на ус. И за это моя глубочайшая признательность и благодарность.pabchek
"Учиться, учиться и еще раз учиться!" WM: R399923528092
Я иногда в подобных случаях делаю так: в ближайшем свободном столбце пишу что-то типа =ЕСЛИ(В2=42370;1;) и сортирую всю таблицу по этому столбцу по возрастанию. Нахожу первую единичку и удаляю все строки от нее до последней заполненной строки. Потом вспомогательный столбец удаляю. Конечно же, все это можно и макросом написать.
Я иногда в подобных случаях делаю так: в ближайшем свободном столбце пишу что-то типа =ЕСЛИ(В2=42370;1;) и сортирую всю таблицу по этому столбцу по возрастанию. Нахожу первую единичку и удаляю все строки от нее до последней заполненной строки. Потом вспомогательный столбец удаляю. Конечно же, все это можно и макросом написать._Boroda_