powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление строки
14 сообщений из 14, страница 1 из 1
Удаление строки
    #36077617
ffflake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нужно удалить в excel строки, если значения первого столбца равны 0, через макрос, как это сделать?
...
Рейтинг: 0 / 0
Удаление строки
    #36077669
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
воспользуйтесь поиском по форуму
...
Рейтинг: 0 / 0
Удаление строки
    #36077682
Algol70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проделайте что вам нужно через Tools-Macro-Record new macro
Вы получите код который потом можно переделать
...
Рейтинг: 0 / 0
Удаление строки
    #36078263
ffflake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deggasadвоспользуйтесь поиском по форуму

Дело в том что я впервые пытаюсь это проделать и макрос для меня это темный лес, поэтому прошу помощи, может кто-нить подскажет код с объяснениями к каждой строке, буду очень благодарна!!!
...
Рейтинг: 0 / 0
Удаление строки
    #36078306
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выкладывайте небольшой файл-пример, поглядим... ;-)
...
Рейтинг: 0 / 0
Удаление строки
    #36078926
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ffflake,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Sub delRow()
'Объявляем переменные
Dim i As Integer 'переменная определяющая номер строки
Dim EndRow As Integer 'переменная определяющая номер последней заполненной строки
Dim vremya 'время начала работы макроса

Application.ScreenUpdating = False ' отключение обновления экрана

vremya = Timer 'запомнили время начала работы макроса

EndRow = Range("A65536").End(xlUp).Row 'один из способов определения последней строки. Определили только в столбце "A". Другие _
'методы их плюсы и минусы см. _
'http://www.sql.ru/forum/actualthread.aspx?tid=396213&hl=%ef%ee%f1%eb%e5%e4%ed%ff%ff+%f1%f2%f0%ee%ea%e0+%e4%e8%e0%ef%e0%e7%ee%ed%e0#3781642 _
'активно пользуемся поиском

  For i =  1  To EndRow 'Цикл по строкам от первой до последней (EndRow)
   If Cells(i, "A") =  0  And Cells(i, "A") <> "" Then 'Сравниваем: Если значение ячейки в i-той строке столбца "A" равно нулю и не пустое
    Rows(i).Delete 'то удаляем i-тую строку
    i = i -  1  ' т.к. мы выше удалили строку, то диапазон сместился на одну строчку вверх. Поэтому мы должны проверить эту строку еще раз. _
'Для этого мы уменьшаем значение _
    'i  на единицу, но только после удаления строки. Иначе у нас может появится бесконечный цикл
   End If 'Закончили сравнивать
  Next i 'Переходим к следующему занчению i если оно не больше значения EndRow

Debug.Print Timer - vremya ' из текущего времени отняли время начала работы макроса и записали в окно Immediate, в которое можно перейти Ctrl + D

End Sub
' Макрос далеко не идеальный. Долгий, т.к. работает в цикле. На 10 000 строк с нулями уходит у меня около 10 сек. _
'Все пути к ячейкам лучше всего прописывать полностью : Книга.Лист.Ячейка(). В противном случае может сработать на активном листе любой книги. _
'Как сделать без цикла, я не знаю. :-) Можно порыться в форуме - там точно все это есть ;-). А если не получится обращаться с конкретными вопросами
...
Рейтинг: 0 / 0
Удаление строки
    #36079017
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей06,

Неоднократно обсуждалось на форуме, что если в цикле делать, то желательно в цикле объединять диапазон, а потом разом удалять. Это значительно ускоряет процесс.


Ну а если про оригинальные решения, то вспомнилось такое из старых экспериментов
Код: plaintext
1.
2.
3.
4.
5.
Sub test()
    Dim x, rng As Range
    x = Evaluate("TRANSPOSE(""A""&SMALL(IF((A1:A100=0)*(A1:A100<>""""),ROW(A1:A100)),ROW(A1:INDEX(A1:A100,COUNTIF(A1:A100,0)))))")
    Set rng = Range(Join(x, ","))
    rng.EntireRow.Select ' Delete
End Sub
...
Рейтинг: 0 / 0
Удаление строки
    #36079285
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, Deggasad, я тоже помню что нужно объединять диапазоны, а после разом удалять. Но не стал искать эти алгоритмы. А деушка писала следующее:ffflakeДело в том что я впервые пытаюсь это проделать и макрос для меня это темный лес, поэтому прошу помощи, может кто-нить подскажет код с объяснениями к каждой строке, буду очень благодарна!!!
Поэтому сделал простым циклом, который пусть и долгий/неэффективный, но не будет пугать страшными формулами ;-).
Буду рад, если мои комментарии помогут ffflake.
...
Рейтинг: 0 / 0
Удаление строки
    #36079372
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант Deggasadа ограничен небольшим количеством строк, подлежащим удалинию (порядка 50-60).
Вот вариант более универсальный:
...
Рейтинг: 0 / 0
Удаление строки
    #36079546
ffflake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей06ffflake,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Sub delRow()
'Объявляем переменные
Dim i As Integer 'переменная определяющая номер строки
Dim EndRow As Integer 'переменная определяющая номер последней заполненной строки
Dim vremya 'время начала работы макроса

Application.ScreenUpdating = False ' отключение обновления экрана

vremya = Timer 'запомнили время начала работы макроса

EndRow = Range("A65536").End(xlUp).Row 'один из способов определения последней строки. Определили только в столбце "A". Другие _
'методы их плюсы и минусы см. _
'http://www.sql.ru/forum/actualthread.aspx?tid=396213&hl=%ef%ee%f1%eb%e5%e4%ed%ff%ff+%f1%f2%f0%ee%ea%e0+%e4%e8%e0%ef%e0%e7%ee%ed%e0#3781642 _
'активно пользуемся поиском

  For i =  1  To EndRow 'Цикл по строкам от первой до последней (EndRow)
   If Cells(i, "A") =  0  And Cells(i, "A") <> "" Then 'Сравниваем: Если значение ячейки в i-той строке столбца "A" равно нулю и не пустое
    Rows(i).Delete 'то удаляем i-тую строку
    i = i -  1  ' т.к. мы выше удалили строку, то диапазон сместился на одну строчку вверх. Поэтому мы должны проверить эту строку еще раз. _
'Для этого мы уменьшаем значение _
    'i  на единицу, но только после удаления строки. Иначе у нас может появится бесконечный цикл
   End If 'Закончили сравнивать
  Next i 'Переходим к следующему занчению i если оно не больше значения EndRow

Debug.Print Timer - vremya ' из текущего времени отняли время начала работы макроса и записали в окно Immediate, в которое можно перейти Ctrl + D

End Sub
' Макрос далеко не идеальный. Долгий, т.к. работает в цикле. На 10 000 строк с нулями уходит у меня около 10 сек. _
'Все пути к ячейкам лучше всего прописывать полностью : Книга.Лист.Ячейка(). В противном случае может сработать на активном листе любой книги. _
'Как сделать без цикла, я не знаю. :-) Можно порыться в форуме - там точно все это есть ;-). А если не получится обращаться с конкретными вопросами


Супер объяснение, огромнейшее спасибо!!!
...
Рейтинг: 0 / 0
Удаление строки
    #36079803
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей06Да, Deggasad, я тоже помню что нужно объединять диапазоны, а после разом удалять. Но не стал искать эти алгоритмы. А деушка писала следующее:ffflakeДело в том что я впервые пытаюсь это проделать и макрос для меня это темный лес, поэтому прошу помощи, может кто-нить подскажет код с объяснениями к каждой строке, буду очень благодарна!!!
Поэтому сделал простым циклом, который пусть и долгий/неэффективный, но не будет пугать страшными формулами ;-).
Буду рад, если мои комментарии помогут ffflake.

Не ожидал от Вас такой реакции защиты :) Я наверное слишком резко выразился.
Но, Сергей, я же не говорил ни о каких сложных формулах, я говорил, что операцию удаления желательно делать в конце, а не в цикле.
А формулы привел просто для поддержания разговора :)
...
Рейтинг: 0 / 0
Удаление строки
    #36079812
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikВариант Deggasadа ограничен небольшим количеством строк, подлежащим удалинию (порядка 50-60).
Вот вариант более универсальный:

Это для случая когда в ячейках значения.
Все же варианты с использованием операций на листе имеют недостаток и ограниченность использования.
Но очень интересное решение, спасибо, что напомнили, вы уже ранее его употребляли.
...
Рейтинг: 0 / 0
Удаление строки
    #36079829
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deggasad,
во первых, можно на "ты", а во вторых - именно таким способом я ещё не делал.
Было что-то похожее, но с исп. промежуточного столбца.
...
Рейтинг: 0 / 0
Удаление строки
    #36079848
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad, мы уже с тобой давно на ты, вроде как.
И никакой защиты... :-)
так, для поддержки разговора.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]