powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление всей строки
39 сообщений из 39, показаны все 2 страниц
Удаление всей строки
    #34439623
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Подскажиет, пожалуйста, как сделать на VBA следующее:
Необходимо перебрать ячейки одного столбца и в случае, если значение этой ячейки равно нулю, необходимо удалить всю строку, в которой находится данная ячейка.
...
Рейтинг: 0 / 0
Удаление всей строки
    #34439664
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажу тебе часть своего кода... тут я удалял нулевые столбцы... дальше сам разберёшся...
т.е вместо Colum будет Row
пы.сы. ты случайно не шахматку делаешь?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub Отобразить1111111111()
Sheets("Temp").Select
Dim RangeToHide As String
RangeToHide = "D31:IV31"
x =  1 
y =  0 
toDel =  4 
While x <  256 
y = y +  1 
If Range(Cells( 31 , x), Cells( 31 , x)).Text =  0  Then
Range(Cells( 31 , x), Cells( 31 , x)).EntireColumn.Delete
Else
x = x +  1 
End If
If y =  255  Then x =  256 
Wend
End Sub
...
Рейтинг: 0 / 0
Удаление всей строки
    #34439755
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Спасибо за подсказку, но почему-то не работает.
Я уже несколько способов попробовал:

Sub УдалениеНенужныхСтрок()
'
'
MyCount = 0
For i = 17 To 925
If Cells(i, 7).Value = 0 Then
MyCount = MyCount + 1
' ActiveSheet.Range.EntireRow.Cells(i, 7).Delete
' Rows(Cells(i, 7)).Delete
Range(Cells(i, 7)).EntireRow.Delete
End If
Next i
MsgBox "Удалено " & MyCount & " строк"

'
End Sub

Что не так - не пойму!

Кстати, что такое шахматка?
...
Рейтинг: 0 / 0
Удаление всей строки
    #34439784
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Да, совсем забыл. Диалог выдает ошибку:

Run-time error '1004':

Method 'Range' of object '_Global' failed
...
Рейтинг: 0 / 0
Удаление всей строки
    #34439817
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub УдалениеНенужныхСтрок()
'
'
MyCount =  0 
For i =  17  To  925 
If Cells(i,  7 ).Value =  0  Then
MyCount = MyCount +  1 
Rows(i).Delete
End If
Next i
MsgBox "Удалено " & MyCount & " строк"

'
End Sub

по-моему так
...
Рейтинг: 0 / 0
Удаление всей строки
    #34439864
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо

Код: plaintext
Cells(i,  7 ).EntireRow.Delete
...
Рейтинг: 0 / 0
Удаление всей строки
    #34439874
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут нужно учитывать что когда удаляешь строку, то к ней же нужно и вернутся при следующей проверке...
как это сделано у меня, т.е.
если значение=0 то
удалить эту строку
и снова её же проверить
иначе
проверить следующую строку.
...
Рейтинг: 0 / 0
Удаление всей строки
    #34439883
GioCH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте этот макрос, дпя проверки на листе создадите таблицу с несколькими столбцами и строками, запустите макрос, все строки в третем столбце содержающая 0 будут удалены, удачи!

Пример таблицы
A B C
aaa 223 110.0
bbb 345 0,0
ccc 345 0.01
ddd 567 0,0
kkk 789 12,1

проверяется 3-й столбец (С) и если 0 то строка удаляется.
Просто вам надо код переделать под вашу таблицу, ОК?

Sub Delete_empty_rows()
'
' Delete_empty_rows Macro
' Macro recorded 24.05.2006 by Admin
'
Dim i As Long, x As Long
Application.ScreenUpdating = False
[A1].Select
x = ActiveCell.Offset(65535, 1).End(xlUp).Row
For i = x To 1 Step -1
'If IsEmpty(Cells(i, 1)) = True Then
If Cells(i, 3) = 0 Then ' проверка на нуль третего столбца
Range(Cells(i, 1), Cells(i, 256)).Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440018
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Granata005Тут нужно учитывать что когда удаляешь строку, то к ней же нужно и вернутся при следующей проверке...
как это сделано у меня, т.е.
если значение=0 то
удалить эту строку
и снова её же проверить
иначе
проверить следующую строку.

Да, точно. Уже столкнулся с этой проблемой и сделал следующим образом, считает уже минут 10 - кошмар. Значит, сделал так:
Sub УдалениеНенужныхСтрок()
'
'
MyCount = 0
For i = 17 To 925
If Cells(i, 7).Value = 0 Then
MyCount = MyCount + 1
Rows(i).Delete
i = i - 1
End If
Next i
MsgBox "Удалено " & MyCount & " строк"

'
End Sub

Думаю, что причина в том, что если в ячейке пусто, то он ее тоже удаляет, а т.к. количество строк с данными становится меньше 925, то он удаляет последующие строки с пустыми данными, на место которой встает следующая строка и т.д. Вопрос: как сделать условие, чтобы проверялось действительно условие = 0 как число?
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440089
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что нужно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
MyCount =  0 
For i =  17  To  925 
If Cells(i,  7 ).Text=  0  Then
MyCount = MyCount +  1 
Rows(i).Delete
i = i -  1 
End If
Next i
MsgBox "Удалено " & MyCount & " строк"
Т.е. не Value а Text...
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440101
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подитожим:

Граната +
Deggasad -
GioCH -

Буга-га :D
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440193
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Granata005Потому что нужно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
MyCount =  0 
For i =  17  To  925 
If Cells(i,  7 ).Text=  0  Then
MyCount = MyCount +  1 
Rows(i).Delete
i = i -  1 
End If
Next i
MsgBox "Удалено " & MyCount & " строк"
Т.е. не Value а Text...

Это бесконечный цикл

Подытожим:
Granata005 -
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440223
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так попробуй

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub Удаление_строк()
MyCount =  0 
n =  17 
m =  925 
Do
If Cells(n,  7 ).Value =  0  Then
MyCount = MyCount +  1 
Rows(n).Delete
m = m -  1 
Else
n = n +  1 
End If
Loop While n < m
MsgBox "Удалено " & MyCount & " строк"
End Sub
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440243
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadТак попробуй

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub Удаление_строк()
MyCount =  0 
n =  17 
m =  925 
Do
If Cells(n,  7 ).Value =  0  Then
MyCount = MyCount +  1 
Rows(n).Delete
m = m -  1 
Else
n = n +  1 
End If
Loop While n < m
MsgBox "Удалено " & MyCount & " строк"
End Sub


Ещё разик:
Не

Код: plaintext
Loop While n < m

А, нужно так

Код: plaintext
Loop While n <= m
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440288
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты чё гонишь, нет там бесконечного цикла... пьяный?
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440322
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Вот так вот вроде хорошо работает:

Sub УдалениеНенужныхСтрок()
'
'
MyCount = 0
For i = 925 To 17 Step -1
If Cells(i, 7).Text = 0 Then
MyCount = MyCount + 1
Rows(i).Delete
End If
Next i
MsgBox "Удалено " & MyCount & " строк"

'
End Sub

Это как писал GioCH - цикл по убыванию.
Вообщем - Спасибо Всем!

Есть еще такой нюанс: как сделать так, чтобы диапазон (925) определяля автоматически, т.е. находился последний элемент стобца с данными?
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440326
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Granata005Ты чё гонишь, нет там бесконечного цикла... пьяный?

Код: plaintext
1.
2.
3.
4.
5.
6.
For i =  17  To  925 
If Cells(i,  7 ).Text=  0  Then
MyCount = MyCount +  1 
Rows(i).Delete
i = i -  1 
End If
Next i



Если есть есть хоть одно нулевое значение и при этом после 925 строки тоже нулевые значения
925 строка не будет достигнута никогда, так как будет всё время удаляться одна и та же строка и снова возвращаться к ней же i = i - 1 !

Осмелюсь заметить я Вам не грубил!
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440352
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та ладно те... я не грублю :)
вообще не люблю вмешиваться в значение переменной цикла FOR... поэтому использовал While...
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440353
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SВот так вот вроде хорошо работает:

Sub УдалениеНенужныхСтрок()
'
'
MyCount = 0
For i = 925 To 17 Step -1
If Cells(i, 7).Text = 0 Then
MyCount = MyCount + 1
Rows(i).Delete
End If
Next i
MsgBox "Удалено " & MyCount & " строк"

'
End Sub

Это как писал GioCH - цикл по убыванию.
Вообщем - Спасибо Всем!

Есть еще такой нюанс: как сделать так, чтобы диапазон (925) определяля автоматически, т.е. находился последний элемент стобца с данными?


Тоже вариант

Код: plaintext
1.
' определение последней строки в диапазоне, вместо G:G диапазон в котором проверять поставь
LastRow = Range("G:G").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440366
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та ладно те... я не грублю :)
вообще не люблю вмешиваться в значение переменной цикла FOR... поэтому использовал While...
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440372
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SЕсть еще такой нюанс: как сделать так, чтобы диапазон (925) определяля автоматически, т.е. находился последний элемент стобца с данными?
Поиск последней ячейки в Excel
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440400
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Deggasad[quot S]
Код: plaintext
1.
' определение последней строки в диапазоне, вместо G:G диапазон в котором проверять поставь
LastRow = Range("G:G").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row


Я с VBA столкнулся только недавно, как расшифровывается сие?
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440429
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПоследняяСтрока= ВДиапазоне("Г:Г").Найти(Что="ЧТО-НИБУДЬ", НаправлениеПоиска=Дальше, ПорядокПоиска=ПоСтрокам).Строка
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440430
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S Deggasad[quot S]
Код: plaintext
1.
' определение последней строки в диапазоне, вместо G:G диапазон в котором проверять поставь
LastRow = Range("G:G").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row


Я с VBA столкнулся только недавно, как расшифровывается сие?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub УдалениеНенужныхСтрок()

' определение последней строки в диапазоне, вместо G:G диапазон в котором проверять поставь
LastRow = Range("G:G").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row

MyCount =  0 
For i = LastRow To  17  Step - 1 
If Cells(i,  7 ).Text =  0  Then
MyCount = MyCount +  1 
Rows(i).Delete
End If
Next i
MsgBox "Удалено " & MyCount & " строк"

End Sub

Токлько смотри If Cells(i, 7).Text = 0, находит только нулевые значения, но не пустые ячейки
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440442
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Granata005Та ладно те... я не грублю :)
вообще не люблю вмешиваться в значение переменной цикла FOR... поэтому использовал While...

Да наверное всё таки нет бесконечного цикла, извиняюсь
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440508
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не хотел спорить, но бесконечки действительно нет... ;)
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440510
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Deggasad

Токлько смотри If Cells(i, 7).Text = 0, находит только нулевые значения, но не пустые ячейки

Да, мне и нужно удалять не пустые строки, где значение в стобце G = числу 0.

LastRow = Range("G:G").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
А как можно интерпретировать данное выражение? Особенно не понятны переменные внутри функции Find (если это функция)?
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440572
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тю... ну я ж те уже написал:
ПоследняяСтрока= ВДиапазоне("Г:Г").Найти(Что="ЧТО-НИБУДЬ", НаправлениеПоиска=Дальше, ПорядокПоиска=ПоСтрокам).Строка

т.е. выдаёт номер строки в которой из столбца Г было что-нибудь найдено...
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440585
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее не Дальше, а Предыдущее...
короче находит последнюю строку...

Блин, где кнопка "Правка"?!?!?! надоело флудить...
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440586
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Granata005ПоследняяСтрока= ВДиапазоне("Г:Г").Найти(Что="ЧТО-НИБУДЬ", НаправлениеПоиска=Дальше, ПорядокПоиска=ПоСтрокам).Строка

Понятно. Спасибо. А по русски будет работать? :)

Только не все понятно: в конце ".Строка" говорит о том, что нужно вернуть номер строки? это такое свойство Строка. Вообще, мне визуально трудно отличать, где в такого рода выражениях методы, а где свойства. Вроде как после функции с параметрами добавляется свойство? Или нет. Объясните, пожалуйста?
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440606
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Range возвращает диапазон
Find ищет в этом диапазоне и возвращает найденную ячейку
Row - свойство найденной ячейки которую вернула Find.
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440656
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Granata005Range возвращает диапазон
Find ищет в этом диапазоне и возвращает найденную ячейку
Row - свойство найденной ячейки которую вернула Find.

Т.е. получается Range - это объект, Find - метод данного объекта, в результате работы которого получаем объект - ячейку с конкретным адресом. А далее с помощью свойства Row получаем номер строки найденного объекта(т.е. ячейки). Так или нет?
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440684
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SПодскажиет, пожалуйста, как сделать на VBA следующее:
Необходимо перебрать ячейки одного столбца и в случае, если значение этой ячейки равно нулю, необходимо удалить всю строку, в которой находится данная ячейка.

А я для себя решил сделать так.

Сначала очищается строка, где есть значение 0 "Ноль" (в колонке C)

Код: plaintext
1.
2.
 For i =  1  To ActiveCell.SpecialCells(xlLastCell).Row
      If Cells(i,  3 ).Value =  0  Then Rows(i).ClearContents
    Next i

По том удаляю все строки, в которых нет ни одной записи

Код: plaintext
1.
2.
3.
4.
5.
LastRow = ActiveSheet.UsedRange.Rows.Count
LastRow = LastRow + ActiveSheet.UsedRange.Row -  1 
Application.ScreenUpdating = False
For r = LastRow To  1  Step - 1 
If Application.CountA(Rows(r)) =  0  Then Rows(r).Delete
Next r
...
Рейтинг: 0 / 0
Удаление всей строки
    #34440687
Granata005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да...
Range он и обьект, и функция возвращающая обьект...
там чёрт ногу сломит :) главное что работает
...
Рейтинг: 0 / 0
Удаление всей строки
    #34441383
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
А подскажите еще, как сделать, чтобы курсор на листе переместился в заданные координаты?
...
Рейтинг: 0 / 0
Удаление всей строки
    #34441426
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SА подскажите еще, как сделать, чтобы курсор на листе переместился в заданные координаты?

Range("A1").Select
...
Рейтинг: 0 / 0
Удаление всей строки
    #34441532
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Deggasad SА подскажите еще, как сделать, чтобы курсор на листе переместился в заданные координаты?

Range("A1").Select

Супер!
Что только не перепробовал.
Спасибо!
...
Рейтинг: 0 / 0
Удаление всей строки
    #34441627
S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S
Гость
Есть еще вопрос.
Теперь необходимо удалить строки в которых одна из ячеек содержит дату. И в случае, если дата позже определенной даты - удалить все строку. Т.е. ДД.ММ.ГГГГ > 31.03.2007 то удаляем.
Если сделать так, то удаляет, но все равно остаются строки где дата больше 31.03.2007 и вообще не понятно, что удаляет.

For i = LastRow To 1 Step -1
If Cells(i, 5).Value > "31.03.2007" Then
MyCount = MyCount + 1
Rows(i).Delete
End If
Next i

Как можно сделать?
...
Рейтинг: 0 / 0
Удаление всей строки
    #34441656
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SЕсть еще вопрос.
Теперь необходимо удалить строки в которых одна из ячеек содержит дату. И в случае, если дата позже определенной даты - удалить все строку. Т.е. ДД.ММ.ГГГГ > 31.03.2007 то удаляем.
Если сделать так, то удаляет, но все равно остаются строки где дата больше 31.03.2007 и вообще не понятно, что удаляет.

For i = LastRow To 1 Step -1
If Cells(i, 5).Value > "31.03.2007" Then
MyCount = MyCount + 1
Rows(i).Delete
End If
Next i

Как можно сделать?

dim x as date
x = "31.03.2007"
For i = LastRow To 1 Step -1
If Format(Cells(i, 5).Value, "dd.mm.yyyy") > x Then
MyCount = MyCount + 1
Rows(i).Delete
End If
Next i
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление всей строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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