powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление всей строки
25 сообщений из 39, страница 1 из 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
25 сообщений из 39, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление всей строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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