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

Вход

Регистрация

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

 

= Мир MS Excel/удаление строк по условию, № пп (макрос) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » удаление строк по условию, № пп (макрос) (Макросы/Sub)
удаление строк по условию, № пп (макрос)
grh1 Дата: Понедельник, 12.09.2022, 10:04 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Добрый день, уважаемые знатоки VBA!

Прошу помощи в написании макроса удаления строк с условием если в столбце "AA" значение ≤ 0…

Самостоятельно наваял макрос удаления строк в столбце если значение = нулю.
А как ПРОПИСАТЬ одновременно и = 0 и < 0 – не знаю.

Ну и если можно строки кода как после удаления восстановить порядковый номер в столбце «В».
Файл-пример прилагаю.
К сообщению приложен файл: 3343732.xlsm(34.2 Kb)


Vadym Gorokh
 
Ответить
СообщениеДобрый день, уважаемые знатоки VBA!

Прошу помощи в написании макроса удаления строк с условием если в столбце "AA" значение ≤ 0…

Самостоятельно наваял макрос удаления строк в столбце если значение = нулю.
А как ПРОПИСАТЬ одновременно и = 0 и < 0 – не знаю.

Ну и если можно строки кода как после удаления восстановить порядковый номер в столбце «В».
Файл-пример прилагаю.

Автор - grh1
Дата добавления - 12.09.2022 в 10:04
ВладимирС Дата: Понедельник, 12.09.2022, 10:54 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Попробуйте так:
[vba]
Код
Sub udalenie()

For i = 500 To 1 Step -1
    If Cells(i, 27) = 0 Or Cells(i, 27) < 0 Then
        Cells(i, 27).EntireRow.Delete
    End If
Next i

End Sub
[/vba]
 
Ответить
СообщениеПопробуйте так:
[vba]
Код
Sub udalenie()

For i = 500 To 1 Step -1
    If Cells(i, 27) = 0 Or Cells(i, 27) < 0 Then
        Cells(i, 27).EntireRow.Delete
    End If
Next i

End Sub
[/vba]

Автор - ВладимирС
Дата добавления - 12.09.2022 в 10:54
grh1 Дата: Понедельник, 12.09.2022, 11:07 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
ВладимирС, что-то не корректно работает.

В моем коде строка:
[vba]
Код
If Cells(i, 27) = "0"
[/vba]
отрабатывает отлично

а вот если ставлю без ковычек
[vba]
Код
If Cells(i, 27) = 0
[/vba]
работать не хочет


Vadym Gorokh

Сообщение отредактировал grh1 - Понедельник, 12.09.2022, 11:17
 
Ответить
СообщениеВладимирС, что-то не корректно работает.

В моем коде строка:
[vba]
Код
If Cells(i, 27) = "0"
[/vba]
отрабатывает отлично

а вот если ставлю без ковычек
[vba]
Код
If Cells(i, 27) = 0
[/vba]
работать не хочет

Автор - grh1
Дата добавления - 12.09.2022 в 11:07
Sancho Дата: Понедельник, 12.09.2022, 11:19 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
grh1, добрый день!
[vba]
Код
Sub udalenie()

For i = 500 To 1 Step -1
    If Cells(i, 27) <= 0 Then
        Rows(i).Delete
    End If
Next i

End Sub
[/vba]
 
Ответить
Сообщениеgrh1, добрый день!
[vba]
Код
Sub udalenie()

For i = 500 To 1 Step -1
    If Cells(i, 27) <= 0 Then
        Rows(i).Delete
    End If
Next i

End Sub
[/vba]

Автор - Sancho
Дата добавления - 12.09.2022 в 11:19
grh1 Дата: Понедельник, 12.09.2022, 11:36 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Sancho, так же работать не хочет.
Может нужно указать диапазон удаления?


Vadym Gorokh
 
Ответить
СообщениеSancho, так же работать не хочет.
Может нужно указать диапазон удаления?

Автор - grh1
Дата добавления - 12.09.2022 в 11:36
ВладимирС Дата: Понедельник, 12.09.2022, 11:42 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

У меня работает и код из Сообщение № 2 и Сообщение № 4 без проблем. И если в Вашем коде заменяю без кавычек тоже удаляет нулевые.
 
Ответить
СообщениеУ меня работает и код из Сообщение № 2 и Сообщение № 4 без проблем. И если в Вашем коде заменяю без кавычек тоже удаляет нулевые.

Автор - ВладимирС
Дата добавления - 12.09.2022 в 11:42
Sancho Дата: Понедельник, 12.09.2022, 11:45 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
grh1, не работает как? сообщает об ошибке или не удаляетс строки? Если первый вариант, какая ошибка? Если второй вариант у вас точно отрицательные и нулевые результаты в 27м столбце, как указано в макросе? попробуйте сделайте переменную, например XXX=Cells(i, 27) и через отладчик посмотреть какой результат получаете в переменную.
PS у меня макрос отработал как <=0 так и <"0"
 
Ответить
Сообщениеgrh1, не работает как? сообщает об ошибке или не удаляетс строки? Если первый вариант, какая ошибка? Если второй вариант у вас точно отрицательные и нулевые результаты в 27м столбце, как указано в макросе? попробуйте сделайте переменную, например XXX=Cells(i, 27) и через отладчик посмотреть какой результат получаете в переменную.
PS у меня макрос отработал как <=0 так и <"0"

Автор - Sancho
Дата добавления - 12.09.2022 в 11:45
Sancho Дата: Понедельник, 12.09.2022, 11:46 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
grh1, попробуйте еще дописать Cells(i, 27).Value
 
Ответить
Сообщениеgrh1, попробуйте еще дописать Cells(i, 27).Value

Автор - Sancho
Дата добавления - 12.09.2022 в 11:46
grh1 Дата: Понедельник, 12.09.2022, 11:57 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Sancho
Строки удалились, но при этом:

1. макрос работал секунд 40-50;
2. Макрос удалил и сверху до таблицы все строки;
3. Макрос удалил в столбце "В" всю нумерацию.

Поэтому и написал, что не работает, вернее работает но через...
Во вложенном файле-примере если нажать на выполнение макроса, то удаляться четко только строки с нулями. Но при этом ноль наверно выступает как текст, потому что в ковычках.


Vadym Gorokh
 
Ответить
СообщениеSancho
Строки удалились, но при этом:

1. макрос работал секунд 40-50;
2. Макрос удалил и сверху до таблицы все строки;
3. Макрос удалил в столбце "В" всю нумерацию.

Поэтому и написал, что не работает, вернее работает но через...
Во вложенном файле-примере если нажать на выполнение макроса, то удаляться четко только строки с нулями. Но при этом ноль наверно выступает как текст, потому что в ковычках.

Автор - grh1
Дата добавления - 12.09.2022 в 11:57
grh1 Дата: Понедельник, 12.09.2022, 13:48 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Поэкспериментировав немного, выявил более-менее рабочий код, но почему-то удаляются не все строки с нулем и отрицательным значением.
Что не так сделал, подправьте пожалуйста.
Вот код:
[vba]
Код
Sub udalenie()

    Last = Cells(Rows.Count, 2).End(xlUp).Row

For i = 7 To Last
    If Cells(i, 27).Value <= 0 Then
        Rows(i).Delete
    End If
Next i

End Sub

[/vba]
К сообщению приложен файл: __.xlsm(20.4 Kb)


Vadym Gorokh

Сообщение отредактировал grh1 - Понедельник, 12.09.2022, 14:00
 
Ответить
СообщениеПоэкспериментировав немного, выявил более-менее рабочий код, но почему-то удаляются не все строки с нулем и отрицательным значением.
Что не так сделал, подправьте пожалуйста.
Вот код:
[vba]
Код
Sub udalenie()

    Last = Cells(Rows.Count, 2).End(xlUp).Row

For i = 7 To Last
    If Cells(i, 27).Value <= 0 Then
        Rows(i).Delete
    End If
Next i

End Sub

[/vba]

Автор - grh1
Дата добавления - 12.09.2022 в 13:48
Sancho Дата: Понедельник, 12.09.2022, 13:57 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
2. Макрос удалил и сверху до таблицы все строки;

у вас изначально в строке For i = 500 To 1 Step -1, что означает что вам необходимо проверить и обработать макросом по первую строку, мы же не знаем что вам на самом деле нужно. если вам верхние строки нужны то соответсвенно поправьте код For i = 500 To 7 Step -1

1. макрос работал секунд 40-50;

3. Макрос удалил в столбце "В" всю нумерацию.

всю нумерацию удалить он не мог, нарушил последовательность, удалив строки, да. А почему он не должен был этого сделать? у вас же нумерация не зависима от строки в файле, не основана на формулах. просто числа. если не так то пришлите ваш файл, посмотрю что не так.
 
Ответить
Сообщение
2. Макрос удалил и сверху до таблицы все строки;

у вас изначально в строке For i = 500 To 1 Step -1, что означает что вам необходимо проверить и обработать макросом по первую строку, мы же не знаем что вам на самом деле нужно. если вам верхние строки нужны то соответсвенно поправьте код For i = 500 To 7 Step -1

1. макрос работал секунд 40-50;

3. Макрос удалил в столбце "В" всю нумерацию.

всю нумерацию удалить он не мог, нарушил последовательность, удалив строки, да. А почему он не должен был этого сделать? у вас же нумерация не зависима от строки в файле, не основана на формулах. просто числа. если не так то пришлите ваш файл, посмотрю что не так.

Автор - Sancho
Дата добавления - 12.09.2022 в 13:57
Sancho Дата: Понедельник, 12.09.2022, 14:02 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
Поэкспериментировав немного, выявил более-менее рабочий код, но почему-то удаляются не все строки с нулем и отрицательным значением.
Что не так сделал, подправьте пожалуйста.


первый подход от конца к началу был более правильный, потому что если идут подряд строки, выполняющие условия то таким циклом сторки будут пропускаться. Например подряд идут строки 10 и 11. На 10м шаге цикла макрос удалил десятую строку, а 11 я строка соответсвенно сдивнулась на 10ю строку. следующий шаг уже 11 строка. 10я соответсвенно вылетела из обработки. вам нужно либо поправить цикл как вы написали изначально, но с определителем последней строки
[vba]
Код
Sub udalenie()

    Last = Cells(Rows.Count, 2).End(xlUp).Row

For i = Last  To 7 Step -1
    If Cells(i, 27).Value <= 0 Then
        Rows(i).Delete
    End If
Next i

End Sub
[/vba]

либо добавить возврат на предыдущий шаг
[vba]
Код
Sub udalenie()

    Last = Cells(Rows.Count, 2).End(xlUp).Row

For i = 7 To Last
    If Cells(i, 27).Value <= 0 Then
        Rows(i).Delete
i=i-1
    End If
Next i

End Sub
[/vba]


Сообщение отредактировал Sancho - Понедельник, 12.09.2022, 14:07
 
Ответить
Сообщение
Поэкспериментировав немного, выявил более-менее рабочий код, но почему-то удаляются не все строки с нулем и отрицательным значением.
Что не так сделал, подправьте пожалуйста.


первый подход от конца к началу был более правильный, потому что если идут подряд строки, выполняющие условия то таким циклом сторки будут пропускаться. Например подряд идут строки 10 и 11. На 10м шаге цикла макрос удалил десятую строку, а 11 я строка соответсвенно сдивнулась на 10ю строку. следующий шаг уже 11 строка. 10я соответсвенно вылетела из обработки. вам нужно либо поправить цикл как вы написали изначально, но с определителем последней строки
[vba]
Код
Sub udalenie()

    Last = Cells(Rows.Count, 2).End(xlUp).Row

For i = Last  To 7 Step -1
    If Cells(i, 27).Value <= 0 Then
        Rows(i).Delete
    End If
Next i

End Sub
[/vba]

либо добавить возврат на предыдущий шаг
[vba]
Код
Sub udalenie()

    Last = Cells(Rows.Count, 2).End(xlUp).Row

For i = 7 To Last
    If Cells(i, 27).Value <= 0 Then
        Rows(i).Delete
i=i-1
    End If
Next i

End Sub
[/vba]

Автор - Sancho
Дата добавления - 12.09.2022 в 14:02
Sancho Дата: Понедельник, 12.09.2022, 14:30 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
Ну и если можно строки кода как после удаления восстановить порядковый номер в столбце «В».

вот этот пункт я проглядел, сорян)
В столбце B напишите формулу
Код
=СТРОКА()-6
 
Ответить
Сообщение
Ну и если можно строки кода как после удаления восстановить порядковый номер в столбце «В».

вот этот пункт я проглядел, сорян)
В столбце B напишите формулу
Код
=СТРОКА()-6

Автор - Sancho
Дата добавления - 12.09.2022 в 14:30
grh1 Дата: Понедельник, 12.09.2022, 15:41 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Первый подход от конца к началу был более правильный


В этом собака порылась - спасибо за помощь, Sancho все заработало как надо.

По поводу формулы это хорошо, но нельзя ли макросом прикрутить что-нибудь?


Vadym Gorokh
 
Ответить
Сообщение
Первый подход от конца к началу был более правильный


В этом собака порылась - спасибо за помощь, Sancho все заработало как надо.

По поводу формулы это хорошо, но нельзя ли макросом прикрутить что-нибудь?

Автор - grh1
Дата добавления - 12.09.2022 в 15:41
Serge_007 Дата: Понедельник, 12.09.2022, 16:08 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 15538
Репутация: 2558 ±
Замечаний: ±

Excel 2016
grh1, Вы хотите полный бан?
У Вас до него осталось всего 2 замечания

нельзя ли макросом прикрутить что-нибудь?
Читайте правила форума, пункт 4


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщениеgrh1, Вы хотите полный бан?
У Вас до него осталось всего 2 замечания

нельзя ли макросом прикрутить что-нибудь?
Читайте правила форума, пункт 4

Автор - Serge_007
Дата добавления - 12.09.2022 в 16:08
grh1 Дата: Понедельник, 12.09.2022, 16:19 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Serge_007, в теме я оговорил, что № пп - тоже вопрос и в самом первом посту т.е. в объявлении своем я и написал:
Ну и если можно строки кода как после удаления восстановить порядковый номер в столбце «В».


Слова СТРОКИ КОДА я понимаю макрос. И всё это связано с ОДНОЙ таблицей, в которой я попросил помощи.
Из-за ОСНОВНОГО моего вопроса (удалить строки) сразу же в этой таблице возникает вопрос корректировки порядкового номера и это связано одной темой.

Я не пойму в чем проблема и за что я впал в такую немилось к Вам?


Vadym Gorokh
 
Ответить
СообщениеSerge_007, в теме я оговорил, что № пп - тоже вопрос и в самом первом посту т.е. в объявлении своем я и написал:
Ну и если можно строки кода как после удаления восстановить порядковый номер в столбце «В».


Слова СТРОКИ КОДА я понимаю макрос. И всё это связано с ОДНОЙ таблицей, в которой я попросил помощи.
Из-за ОСНОВНОГО моего вопроса (удалить строки) сразу же в этой таблице возникает вопрос корректировки порядкового номера и это связано одной темой.

Я не пойму в чем проблема и за что я впал в такую немилось к Вам?

Автор - grh1
Дата добавления - 12.09.2022 в 16:19
Serge_007 Дата: Понедельник, 12.09.2022, 16:46 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 15538
Репутация: 2558 ±
Замечаний: ±

Excel 2016
в чем проблема
Я уже писал ранее: В несоблюдении правил форума
Либо Вы перестаете задавать разные вопросы в одной теме, либо получаете бан

это связано одной темой
Что "это" связано? А если Вам в этой же таблице понадобится добавить условного форматирования, результат запроса PQ, несколько формул, шрифт поправить и заливку столбцов сделать, то Вы так же в эту тему писать будуте потому что таблица ОДНА и та же для всех этих вопросов?

Из-за ОСНОВНОГО моего вопроса (удалить строки) сразу же в этой таблице возникает вопрос...
Посчитайте количество слов "вопрос" в этой Вашей фразе. Таких слов будет ДВА. Значит должно быть ДВЕ темы, о чем совершенно однозначно написано в правилах: "Один вопрос - одна тема"
Что тут может быть непонятного?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
в чем проблема
Я уже писал ранее: В несоблюдении правил форума
Либо Вы перестаете задавать разные вопросы в одной теме, либо получаете бан

это связано одной темой
Что "это" связано? А если Вам в этой же таблице понадобится добавить условного форматирования, результат запроса PQ, несколько формул, шрифт поправить и заливку столбцов сделать, то Вы так же в эту тему писать будуте потому что таблица ОДНА и та же для всех этих вопросов?

Из-за ОСНОВНОГО моего вопроса (удалить строки) сразу же в этой таблице возникает вопрос...
Посчитайте количество слов "вопрос" в этой Вашей фразе. Таких слов будет ДВА. Значит должно быть ДВЕ темы, о чем совершенно однозначно написано в правилах: "Один вопрос - одна тема"
Что тут может быть непонятного?

Автор - Serge_007
Дата добавления - 12.09.2022 в 16:46
grh1 Дата: Понедельник, 12.09.2022, 17:35 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Serge_007, ок создам тему


Vadym Gorokh
 
Ответить
СообщениеSerge_007, ок создам тему

Автор - grh1
Дата добавления - 12.09.2022 в 17:35
Мир MS Excel » Вопросы и решения » Вопросы по VBA » удаление строк по условию, № пп (макрос) (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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