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

Вход

Регистрация

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

 

= Мир MS Excel/Удаление строки по значению ячейки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление строки по значению ячейки (Макросы/Sub)
Удаление строки по значению ячейки
ant6729 Дата: Понедельник, 20.03.2017, 11:03 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Добрый день, нужно удалить строки, в первой ячейке которой содержится r
К сообщению приложен файл: 3119871.xlsx (8.0 Kb)
 
Ответить
СообщениеДобрый день, нужно удалить строки, в первой ячейке которой содержится r

Автор - ant6729
Дата добавления - 20.03.2017 в 11:03
sboy Дата: Понедельник, 20.03.2017, 11:24 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
[vba]
Код
Sub delete_r()
For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(x, 1).Value Like "*r*" Then Rows(x).Delete (xlShiftUp)
Next x
End Sub
[/vba]


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
[vba]
Код
Sub delete_r()
For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(x, 1).Value Like "*r*" Then Rows(x).Delete (xlShiftUp)
Next x
End Sub
[/vba]

Автор - sboy
Дата добавления - 20.03.2017 в 11:24
_Boroda_ Дата: Понедельник, 20.03.2017, 11:37 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Еще вариант
[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]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕще вариант
[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]

Автор - _Boroda_
Дата добавления - 20.03.2017 в 11:37
ant6729 Дата: Понедельник, 20.03.2017, 15:16 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Всем спасибо!!

Помогите, пожалуйста, мне тогда с моей билибердой) по этому примеру)

[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
Дата добавления - 20.03.2017 в 15:16
ant6729 Дата: Понедельник, 20.03.2017, 17:01 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
на счет step -1 нашел.. по остальному разебремся, всем спасибо!
 
Ответить
Сообщениена счет step -1 нашел.. по остальному разебремся, всем спасибо!

Автор - ant6729
Дата добавления - 20.03.2017 в 17:01
_Boroda_ Дата: Понедельник, 20.03.2017, 18:43 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
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_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение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_
Дата добавления - 20.03.2017 в 18:43
ant6729 Дата: Понедельник, 20.03.2017, 23:00 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Офигеть... Спасибо!!
 
Ответить
СообщениеОфигеть... Спасибо!!

Автор - ant6729
Дата добавления - 20.03.2017 в 23:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление строки по значению ячейки (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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