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

Вход

Регистрация

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

 

= Мир MS Excel/Удаление строк по значению массива в цикле for - Мир MS Excel

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

Excel 2010
Добрый вечер всем!

Хочу доразобрать для себя тему массива
Подскажите, пожалуйста, как оптимизировать код на удаление строк, содержащих значения в массиве.

[vba]
Код


names = Array("Петя","Вася", "Маша")

For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(x, 3).Value Like "*Петя*" Then Rows(x).Delete
Next x

For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(x, 3).Value Like "*Вася*" Then Rows(x).Delete
Next x

For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(x, 3).Value Like "*Маша*" Then Rows(x).Delete
Next x

[/vba]


Сообщение отредактировал ant6729 - Воскресенье, 13.08.2017, 20:12
 
Ответить
СообщениеДобрый вечер всем!

Хочу доразобрать для себя тему массива
Подскажите, пожалуйста, как оптимизировать код на удаление строк, содержащих значения в массиве.

[vba]
Код


names = Array("Петя","Вася", "Маша")

For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(x, 3).Value Like "*Петя*" Then Rows(x).Delete
Next x

For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(x, 3).Value Like "*Вася*" Then Rows(x).Delete
Next x

For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(x, 3).Value Like "*Маша*" Then Rows(x).Delete
Next x

[/vba]

Автор - ant6729
Дата добавления - 13.08.2017 в 20:12
_Boroda_ Дата: Воскресенье, 13.08.2017, 20:39 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Если по-простому, то все циклы в один складываем
[vba]
Код
Sub tt()
    Application.ScreenUpdating = 0
    Application.Calculation = xlCalculationManual
    Imena = Array("Петя", "Вася", "Маша")
    r1_ = Cells(Rows.Count, 3).End(xlUp).Row
    For x = r1_ To 1 Step -1
        z_ = Cells(x, 3).Value
        For j = 0 To UBound(Imena)
            If InStr(1, z_, Imena(j), 1) Then
                Rows(x).Delete
                Exit For
            End If
        Next j
    Next x
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = 1
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕсли по-простому, то все циклы в один складываем
[vba]
Код
Sub tt()
    Application.ScreenUpdating = 0
    Application.Calculation = xlCalculationManual
    Imena = Array("Петя", "Вася", "Маша")
    r1_ = Cells(Rows.Count, 3).End(xlUp).Row
    For x = r1_ To 1 Step -1
        z_ = Cells(x, 3).Value
        For j = 0 To UBound(Imena)
            If InStr(1, z_, Imena(j), 1) Then
                Rows(x).Delete
                Exit For
            End If
        Next j
    Next x
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = 1
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 13.08.2017 в 20:39
ant6729 Дата: Воскресенье, 13.08.2017, 21:19 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Спасибо!

[vba]
Код
For j = 0 To UBound(Imena)
            If InStr(1, z_, Imena(j), 1)
[/vba]

В первой строке перебираем массив с первого по последний...

А во второй синтаксис не могу понять) первая единица(?), ссылка на значение в ячейке колонки, потом пишется ссылка на массив, и единица последняя(?) - тоже не понимаю, что означает, подскажите, пожалуйста)
 
Ответить
СообщениеСпасибо!

[vba]
Код
For j = 0 To UBound(Imena)
            If InStr(1, z_, Imena(j), 1)
[/vba]

В первой строке перебираем массив с первого по последний...

А во второй синтаксис не могу понять) первая единица(?), ссылка на значение в ячейке колонки, потом пишется ссылка на массив, и единица последняя(?) - тоже не понимаю, что означает, подскажите, пожалуйста)

Автор - ant6729
Дата добавления - 13.08.2017 в 21:19
_Boroda_ Дата: Воскресенье, 13.08.2017, 21:25 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Справка
https://msdn.microsoft.com/ru-ru....%3Dtrue
[p.s.]Поскольку я с англицким не дружу, то открываю обычно в Хроме, там есть автопереводчик[/p.s.]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеСправка
https://msdn.microsoft.com/ru-ru....%3Dtrue
[p.s.]Поскольку я с англицким не дружу, то открываю обычно в Хроме, там есть автопереводчик[/p.s.]

Автор - _Boroda_
Дата добавления - 13.08.2017 в 21:25
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление строк по значению массива в цикле for (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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