Sub udal_R() r0_ = 1 c_ = 1 r1_ = Cells(Rows.Count, c_).End(3).Row ar = Cells(r0_, c_).Resize(r1_ - r0_ + 1, 1) For i = r1_ To r0_ Step -1 ' If InStr(ar(i, 1), "r") Then 'только для "r" If InStr(LCase(ar(i, 1)), LCase("r")) Then 'для "r" и "R" Rows(i).Delete End If Next i End Sub
[/vba] Или без LCase для R [vba]
Код
Option Compare Text' для "r" и "R" Sub udal_R() r0_ = 1 c_ = 1 r1_ = Cells(Rows.Count, c_).End(3).Row ar = Cells(r0_, c_).Resize(r1_ - r0_ + 1, 1) For i = r1_ To r0_ Step -1 If InStr(ar(i, 1), "r") Then Rows(i).Delete End If Next i End Sub
[/vba]
Еще вариант [vba]
Код
Sub udal_R() r0_ = 1 c_ = 1 r1_ = Cells(Rows.Count, c_).End(3).Row ar = Cells(r0_, c_).Resize(r1_ - r0_ + 1, 1) For i = r1_ To r0_ Step -1 ' If InStr(ar(i, 1), "r") Then 'только для "r" If InStr(LCase(ar(i, 1)), LCase("r")) Then 'для "r" и "R" Rows(i).Delete End If Next i End Sub
[/vba] Или без LCase для R [vba]
Код
Option Compare Text' для "r" и "R" Sub udal_R() r0_ = 1 c_ = 1 r1_ = Cells(Rows.Count, c_).End(3).Row ar = Cells(r0_, c_).Resize(r1_ - r0_ + 1, 1) For i = r1_ To r0_ Step -1 If InStr(ar(i, 1), "r") Then Rows(i).Delete End If Next i End Sub
Помогите, пожалуйста, мне тогда с моей билибердой) по этому примеру)
[vba]
Код
Sub Ìàêðîñwet() ' ''
Dim Cell As Range Dim i& i = Sheets("Лист1").Cells(Rows, "A") For Each Cell In Range("A:A") If i.Value = "r" Then Row.Select Selection.Delete End If Next Cell
End Sub
[/vba]
буду спрашивать...))
1 Можно ли исправить что-то в моем супер коде и прийти к такому же результату))? как в Ваших кодах? Можете ли указать, почему у меня не взетело)?
2 Почему нет Dim в Ваших кодах?
3 Зачем Rows Count? только чтобы происходила пробежка" снизу вверх? Типа, пользуемся не для подсчета, а для поиска?
4 End(3) - обычно xlup идет... а что 3 означает???
5 Step -1 - это шаг при поиске?
InStr(ar(i, 1), "r") - интересная конструкция
У меня закрадывается мысль... что я как английский зубарил кусками текста... на экзаменах вставляя то один кусок то второй... только потом научился сам говорить без блоков... так и тут будет... хочется, конечно, сразу точно отражать, что нужно.
Всем спасибо!!
Помогите, пожалуйста, мне тогда с моей билибердой) по этому примеру)
[vba]
Код
Sub Ìàêðîñwet() ' ''
Dim Cell As Range Dim i& i = Sheets("Лист1").Cells(Rows, "A") For Each Cell In Range("A:A") If i.Value = "r" Then Row.Select Selection.Delete End If Next Cell
End Sub
[/vba]
буду спрашивать...))
1 Можно ли исправить что-то в моем супер коде и прийти к такому же результату))? как в Ваших кодах? Можете ли указать, почему у меня не взетело)?
2 Почему нет Dim в Ваших кодах?
3 Зачем Rows Count? только чтобы происходила пробежка" снизу вверх? Типа, пользуемся не для подсчета, а для поиска?
4 End(3) - обычно xlup идет... а что 3 означает???
5 Step -1 - это шаг при поиске?
InStr(ar(i, 1), "r") - интересная конструкция
У меня закрадывается мысль... что я как английский зубарил кусками текста... на экзаменах вставляя то один кусок то второй... только потом научился сам говорить без блоков... так и тут будет... хочется, конечно, сразу точно отражать, что нужно.ant6729
1. Прежде всего потому, что Вы считаете сверху вниз. Удалили строку, на ее место встала нижняя, а у Вас это не учтено - Вы уже перепрыгнули на следующую, а ту, что встала на место удаленной, не обработали. Еще - не i.Value, а Cell.Value. Далее - у Row должен быть какой-то идентификатор (какую строку удалять будем?). И зачем Вам вообще i, если цикл пишете For Each Cell ...? 2. Не знаю, как Сергей, а я лентяй и раздолбай. Вот поэтому. Это не только в Вашем коде, я всегда так пишу. 3. Для определения последней ячейки цикла. Чтобы не бегать, как у Вас, по всему столбцу. Зачем Вы проверяете больше миллиона ячеек, если у Вас заполнено на несколько порядков меньше? 4. 3 - это и есть xlUp End(1) - влево xlToLeft End(2) - вправо xlToRight End(3) - вверх xlUp End(4) - вниз xlDown 5. Это шаг цикла. Поскольку мы идем снизу вверх (от большей строки к меньшей), то шаг должен быть отрицательным. Если бы шаг был равен 1, то его можно было бы не писать вообще. InStr - это примерно как функция ПОИСК - номер вхождения второго аргумента в первом. Только ПОИСК при ненахождении дает ошибку, а InStr - ноль. Почитайте справку https://msdn.microsoft.com/ru-ru/library/8460tsh1%28v=vs.90%29.aspx
1. Прежде всего потому, что Вы считаете сверху вниз. Удалили строку, на ее место встала нижняя, а у Вас это не учтено - Вы уже перепрыгнули на следующую, а ту, что встала на место удаленной, не обработали. Еще - не i.Value, а Cell.Value. Далее - у Row должен быть какой-то идентификатор (какую строку удалять будем?). И зачем Вам вообще i, если цикл пишете For Each Cell ...? 2. Не знаю, как Сергей, а я лентяй и раздолбай. Вот поэтому. Это не только в Вашем коде, я всегда так пишу. 3. Для определения последней ячейки цикла. Чтобы не бегать, как у Вас, по всему столбцу. Зачем Вы проверяете больше миллиона ячеек, если у Вас заполнено на несколько порядков меньше? 4. 3 - это и есть xlUp End(1) - влево xlToLeft End(2) - вправо xlToRight End(3) - вверх xlUp End(4) - вниз xlDown 5. Это шаг цикла. Поскольку мы идем снизу вверх (от большей строки к меньшей), то шаг должен быть отрицательным. Если бы шаг был равен 1, то его можно было бы не писать вообще. InStr - это примерно как функция ПОИСК - номер вхождения второго аргумента в первом. Только ПОИСК при ненахождении дает ошибку, а InStr - ноль. Почитайте справку https://msdn.microsoft.com/ru-ru/library/8460tsh1%28v=vs.90%29.aspx_Boroda_