Макрос excel для удаления строки по условию

макрос удалит на листе все строки, в которых содержится искомый текст:

(пример — во вложении ConditionalRowsDeleting.xls)

Sub УдалениеСтрокПоУсловию()
    Dim ra As Range, delra As Range, ТекстДляПоиска As String
    Application.ScreenUpdating = False    ' отключаем обновление экрана

    ТекстДляПоиска = "Наименование ценности"    ' удаляем строки с таким текстом

    ' перебираем все строки в используемом диапазоне листа
    For Each ra In ActiveSheet.UsedRange.Rows
        ' если в строке найден искомый текст
        If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then
            ' добавляем строку в диапазон для удаления
            If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
        End If
    Next
    ' если подходящие строки найдены - удаляем их
    If Not delra Is Nothing Then delra.EntireRow.Delete
End Sub

Чтобы вместо удаления просто скрыть такие строки, замените строку

If Not delra Is Nothing Then delra.EntireRow.Delete

на

If Not delra Is Nothing Then delra.EntireRow.Hidden=TRUE

Расширенная версия этого макроса — с использованием UserForm для ввода искомого значения

Function ПоискСтрокПоУсловию(ByVal ТекстДляПоиска As String, Optional HideOnly As Boolean) As Long
    ' функция получает в качестве параметра ТекстДляПоиска (можно использовать символы * и ?)
    ' Если HideOnly = TRUE, то строки, содержащие в ячейках ТекстДляПоиска, скрываются,
    ' иначе (HideOnly = FALSE - по умолчанию) - удаляются
    ' Функция возвращает количество удалённых строк
    Dim ra As Range, delra As Range
    Application.ScreenUpdating = False    ' отключаем обновление экрана

    ' перебираем все строки в используемом диапазоне листа
    For Each ra In ActiveSheet.UsedRange.Rows
        ' если в строке найден искомый текст
        If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then
            ' добавляем строку в диапазон для удаления
            If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
        End If
    Next
    On Error Resume Next: ПоискСтрокПоУсловию = delra.Areas.Count ' количество найденных строк
    
    If Not delra Is Nothing Then    ' если подходящие строки найдены - скрываем или удаляем их
        If HideOnly Then delra.EntireRow.Hidden = True Else delra.EntireRow.Delete
    End If
End Function

Ещё один вариант кода, позволяющего выполнять поиск (с последующим удалением или скрытием строк) сразу по нескольким условиям:

Sub УдалениеСтрокПоНесколькимУсловиям()
    Dim ra As Range, delra As Range
    Application.ScreenUpdating = False    ' отключаем обновление экрана

    ' ищем и удаляем строки, содержащие заданный текст
    ' (можно указать сколько угодно значений, и использовать подстановочные знаки)
    УдалятьСтрокиСТекстом = Array("Наименование *", "Количество", _
                                  "текст?", "цен*сти", "*78*")
 
    ' перебираем все строки в используемом диапазоне листа
    For Each ra In ActiveSheet.UsedRange.Rows
        ' перебираем все фразы в массиве
        For Each word In УдалятьСтрокиСТекстом
            ' если в очередной строке листа найден искомый текст
            If Not ra.Find(word, , xlValues, xlPart) Is Nothing Then
                ' добавляем строку в диапазон для удаления
                If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
            End If
        Next word
    Next
 
    ' если подходящие строки найдены, то: (оставьте одну из 2 следующих строк)
    If Not delra Is Nothing Then delra.EntireRow.Hidden = True    ' скрываем их
    If Not delra Is Nothing Then delra.EntireRow.Delete    ' удаляем их
End Sub

Хитрости »

28 Май 2011              644901 просмотров


Как удалить строки по условию?

Предположу, что почти каждый сталкивался с ситуацией, когда необходимо удалить только определенные строки: имеется большая таблица и необходимо удалить из неё только те строки, которые содержат какое-то слово (цифру, фразу). Для выполнения подобной задачи можно воспользоваться несколькими способами.

Способ первый:
Использовать встроенное средство Excel — фильтр. Сначала его необходимо «установить» на листе:

  • Выделяем таблицу с данными, включая заголовки. Если их нет — то выделяем с самой первой строки таблицы, в которой необходимо удалить данные
  • устанавливаем фильтр:
    • для Excel 2003: ДанныеФильтрАвтофильтр
    • для Excel 2007-2010: вкладка Данные(Data)Фильтр(Filter)(или вкладка Главная(Home)Сортировка и фильтр(Sort&Filter)Фильтр(Filter))

Теперь выбираем условие для фильтра:

  • в Excel 2003 надо выбрать Условие и в появившейся форме выбрать непосредственно условие(«равно», «содержит», «начинается с» и т.д.), а напротив значение в соответствии с условием.
  • Для 2007-2010 Excel нужно выбрать Текстовые фильтры(Text Filters) и либо сразу выбрать одно из предлагаемых условий, либо нажать Настраиваемый фильтр(Custom Filter) и ввести значения для отбора в форме

После этого удалить отфильтрованные строки. В 2007 Excel могут возникнуть проблемы с удалением отфильтрованных строк, поэтому рекомендую сначала так же прочитать статью: Excel удаляет вместо отфильтрованных строк — все?! Как избежать.


 
Способ второй:

применить код VBA, который потребует только указания значения, которое необходимо найти в строке и номер столбца, в котором искать значение.

Sub Del_SubStr()
    Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку)
    Dim lCol As Long      'номер столбца с просматриваемыми значениями
    Dim lLastRow As Long, li As Long
    Dim lMet As Long
    Dim arr
 
    sSubStr = InputBox("Укажите значение, которое необходимо найти в строке", "www.excel-vba.ru", "")
    If sSubStr = "" Then lMet = 0 Else lMet = 1
    lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1))
    If lCol = 0 Then Exit Sub
 
    lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    arr = Cells(1, lCol).Resize(lLastRow).Value
    Application.ScreenUpdating = 0
    Dim rr As Range
    For li = 1 To lLastRow 'цикл с первой строки до конца
        If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then
            If rr Is Nothing Then
                Set rr = Cells(li, 1)
            Else
                Set rr = Union(rr, Cells(li, 1))
            End If
        End If
    Next li
    If Not rr Is Nothing Then rr.EntireRow.Delete
    Application.ScreenUpdating = 1
End Sub

Если значение sSubStr не будет указано, то будут удалены строки, ячейки указанного столбца которых, пустые.
Данный код необходимо поместить в стандартный модуль. Вызвать с листа его можно нажатием клавиш Alt+F8, после чего выбрать Del_SubStr и нажать Выполнить. Если в данном коде в строке
If -(InStr(Cells(li, 1), sSubStr) > 0) = lMet Then
вместо = lMet указать <> lMet, то удаляться будут строки, не содержащие указанное для поиска значение. Иногда тоже удобно.
Но. Данный код просматривает строки на предмет частичного совпадения указанного значения. Например, если Вы укажете текст для поиска «отчет», то будут удалены все строки, в которых встречается это слово(«квартальный отчет», «отчет за месяц» и т.д.). Это не всегда нужно. Поэтому ниже приведен код, который будет удалять только строки, указанные ячейки которых равны конкретно указанному значению:

Sub Del_SubStr()
    Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку)
    Dim lCol As Long 'номер столбца с просматриваемыми значениями
    Dim lLastRow As Long, li As Long
    Dim arr
 
    sSubStr = InputBox("Укажите значение, которое необходимо найти в строке", "www.excel-vba.ru", "")
    lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1))
    If lCol = 0 Then Exit Sub
 
    lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    arr = Cells(1, lCol).Resize(lLastRow).Value
 
    Application.ScreenUpdating = 0
    Dim rr As Range
    For li = 1 To lLastRow 'цикл с первой строки до конца
        If CStr(arr(li, 1)) = sSubStr Then
            If rr Is Nothing Then
                Set rr = Cells(li, 1)
            Else
                Set rr = Union(rr, Cells(li, 1))
            End If
        End If
    Next li
    If Not rr Is Nothing Then rr.EntireRow.Delete
    Application.ScreenUpdating = 1
End Sub

Здесь так же, как и в случае с предыдущим кодом можно заменить оператор сравнения(Cells(li, lCol) = sSubStr) с равно на неравенство(Cells(li, lCol) <> sSubStr) и тогда удаляться будут строки, значения ячеек которых не равно указанному.


УДАЛЕНИЕ СТРОК НА ОСНОВАНИИ СПИСКА ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
Иногда бывают ситуации, когда необходимо удалить строки не по одному значению, а по нескольким. Например, если строка содержит или Итог или Отчет. Ниже приведен код, при помощи которого можно удалить строки, указав в качестве критерия диапазон значений.
Значения, которые необходимо найти и удалить перечисляются на листе с именем «Лист2». Т.е. указав на «Лист2» в столбце А(начиная с первой строки) несколько значений — они все будут удалены. Если лист называется иначе(скажем «Соответствия») в коде необходимо будет «Лист2» заменить на «Соответствия». Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.

Sub Del_Array_SubStr()
    Dim sSubStr As String    'искомое слово или фраза
    Dim lCol As Long    'номер столбца с просматриваемыми значениями
    Dim lLastRow As Long, li As Long
    Dim avArr, lr As Long
    Dim arr
 
    lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1))
    If lCol = 0 Then Exit Sub
    Application.ScreenUpdating = 0
    lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    'заносим в массив значения листа, в котором необходимо удалить строки
    arr = Cells(1, lCol).Resize(lLastRow).Value
    'Получаем с Лист2 значения, которые надо удалить в активном листе
    With Sheets("Лист2") 'Имя листа с диапазоном значений на удаление
        avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
    End With
    'удаляем
    Dim rr As Range
    For lr = 1 To UBound(avArr, 1)
        sSubStr = avArr(lr, 1)
        For li = 1 To lLastRow 'цикл с первой строки до конца
            If CStr(arr(li, 1)) = sSubStr Then
                If rr Is Nothing Then
                    Set rr = Cells(li, 1)
                Else
                    Set rr = Union(rr, Cells(li, 1))
                End If
            End If
            DoEvents
        Next li
        DoEvents
    Next lr
    If Not rr Is Nothing Then rr.EntireRow.Delete
    Application.ScreenUpdating = 1
End Sub

Чтобы код выше удалял строки не по точному совпадению слов, а по частичному(например, в ячейке записано «Привет, как дела?», а в списке есть слово «привет» — надо удалить, т.к. есть слово «привет»), то надо строку:

If CStr(arr(li, 1)) = sSubStr Then

заменить на такую:

If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

УДАЛЕНИЕ ИЗ ЛИСТА СТРОК, КОТОРЫХ НЕТ В СПИСКЕ ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)

Т.к. в последнее время стало поступать все больше и больше вопросов как не удалять значения по списку, а наоборот — оставить в таблице только те значения, которые перечислены в списке — решил дополнить статью и таким кодом.
Значения, которые необходимо оставить перечисляются на листе с именем «Лист2». Т.е. указав на «Лист2» в столбце А(начиная с первой строки) несколько значений — после работы кода на листе будут оставлены только те строки, в которых присутствует хоть одно из перечисленных в списке значений. Если лист называется иначе(скажем «Соответствия») в коде необходимо будет «Лист2» заменить на «Соответствия». Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.
В отличие от приведенных выше кодов, данный код ориентирован на то, что значения в списке указаны не полностью. Т.е. если необходимо оставить только те ячейки, в которых встречается слово «активы», то в списке надо указать только это слово. В этом случае если в ячейке будет записана фраза «Нематериальные активы» или «Активы сторонние» — эти ячейки не будут удалены, т.к. в них встречается слово «активы». Регистр букв при этом неважен.

'процедура оставляет в листе только те значения, которые перечислены в списке
Sub LeaveOnlyFoundInArray()
    Dim sSubStr As String   'искомое слово или фраза
    Dim lCol As Long        'номер столбца с просматриваемыми значениями
    Dim lLastRow As Long, li As Long
    Dim avArr, lr As Long
    Dim arr
    Dim IsFind As Boolean
 
    lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1))
    If lCol = 0 Then Exit Sub
    Application.ScreenUpdating = 0
    lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    'заносим в массив значения листа, в котором необходимо удалить строки
    arr = Cells(1, lCol).Resize(lLastRow).Value
    'Получаем с Лист2 значения, которые надо удалить в активном листе
    With Sheets("Лист2") 'Имя листа с диапазоном значений на удаление
        avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
    End With
    'удаляем
    Dim rr As Range
    For li = 1 To lLastRow 'цикл с первой строки таблицы до конца
        IsFind = False
        For lr = 1 To UBound(avArr, 1) 'цикл по списку значений на удаление
            sSubStr = avArr(lr, 1)
            If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then
                IsFind = True
            End If
            DoEvents
        Next lr
        'если значение таблицы не найдено в списке - удаляем строку
        If Not IsFind Then
            If rr Is Nothing Then
                Set rr = Cells(li, 1)
            Else
                Set rr = Union(rr, Cells(li, 1))
            End If
        End If
        DoEvents
    Next li
    If Not rr Is Nothing Then rr.EntireRow.Delete
    Application.ScreenUpdating = 1
End Sub

Чтобы код выше сравнивал значения таблицы со значениями списка по точному совпадению слов, а не по частичному, то надо строку:

If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

заменить на такую:

If CStr(arr(li, 1)) = sSubStr Then

Для всех приведенных кодов можно строки не удалять, а скрывать. Для этого надо строку:

If Not rr Is Nothing Then rr.EntireRow.Delete

заменить на такую:

If Not rr Is Nothing Then rr.EntireRow.Hidden = True

По умолчанию все коды начинают просмотр строк с первой по последнюю заполненную на листе. И если необходимо удалять строки не с первой или не по последнюю, то надо внести корректировки в эту строку:

For li = 1 To lLastRow 'цикл с первой строки до конца

1 — это первая строка; lLastRow — определяется автоматически кодом и равна номеру последней заполненной строки на листе. Если надо начать удалять строки только с 7-ой строки(например, в первых 6-ти шапка), то код будет выглядеть так:

For li = 7 To lLastRow 'цикл с седьмой строки до конца

А если надо удалять только с 3-ей по 300-ю, то код будет выглядеть так:

For li = 3 To 300 'цикл с третьей строки до трехсотой

Так же см.:
Что такое макрос и где его искать?
Что такое модуль? Какие бывают модули?
Как создать кнопку для вызова макроса на листе
Удаление всех пустых строк в таблице
Удаление пустых столбцов на листе
Установить Быстрый фильтр
Фильтр


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

 

sashgera

Пользователь

Сообщений: 83
Регистрация: 01.01.1970

#1

16.04.2014 00:28:25

Здравствуйте
Есть макрос, который удаляет строки, если в столбце ‘B’ имеются числа от 0 до 100

Код
Sub Макрос22()
Dim sh As Worksheet, i As Long
Set sh = Sheets("Лист1")
With sh.UsedRange.Columns(2)
     For i = .Rows.Count To 1 Step -1
         With .Cells(i)
             If 0 <= CLng(Trim$(.Value)) And CLng(Trim$(.Value)) <= 100 Then .EntireRow.Delete
         End With
     Next i
End With
End Sub
 

Помогите, пожалуйста, изменить код макроса, что бы строки удалялись, начиная со строки  ‘B2’ и до последней активной ячейки этого столбца (строки в таблице добавляются/удаляются).
Если в ячейке вместо числа имеется знак № – то строку не удалять
..и как все сделать наоборот: не удалять строки, если в ячейках числа от 0 до 100, а остальные удалить. Если в ячейке вместо числа имеется знак № – то строку не удалять

Прикрепленные файлы

  • test.xlsm (18.34 КБ)

 

Scripter

Пользователь

Сообщений: 255
Регистрация: 06.02.2014

#2

16.04.2014 02:06:57

просто изменить  For i = .Rows.Count To 1 Step -1 на To2

но ваш код будет выдавать ошибку в случае конвертации пустой ячейки в Cnlg,
на всякий случай подправил для вашего примера

Код
Dim sh As Worksheet, i As Long
Set sh = Sheets("Лист1")
On Error Resume Next
With sh.UsedRange.Columns(2)
   For i = .Rows.Count To 2 Step -1
        If CLng(IIf(Cells(i, 2).Value = "", 0, Trim(Cells(i, 2).Value))) >= 0 And _
           CLng(IIf(Cells(i, 2).Value = "", 0, Trim(Cells(i, 2).Value))) <= 100 Then
            If Err.Number <> 13 Then
                Rows(i).Delete
            Else
                Err.Clear
            End If
        End If
     Next i
End Withлибо еще проще

либо еще проще

Код
Dim sh As Worksheet, i As Long
Set sh = Sheets("Лист1")
With sh.UsedRange.Columns(2)
     For i = .Rows.Count To 2 Step -1
        If Cells(i, 2).Value <> "№" And Val(Cells(i, 2).Value) >= 0 And Val(Cells(i, 2).Value) <= 100 Then Rows(i).Delete
     Next i
End With
 

Изменено: Scripter16.04.2014 02:29:27

 

sashgera

Пользователь

Сообщений: 83
Регистрация: 01.01.1970

Scripter,
спасибо, а как сделать наоборот — не удалять строки, если в ячейках числа от 0 до 100, а остальные, от 100 и выше — удалить. И в обоих случаях не удалять строки, если в ячейке вместо числа имеется знак №

Изменено: sashgera16.04.2014 02:30:56

 

Scripter

Пользователь

Сообщений: 255
Регистрация: 06.02.2014

#4

16.04.2014 02:30:32

Цитата
sashgera пишет: не удалять строки, если в ячейках числа от 0 до 100,
Код
Dim sh As Worksheet, i As Long
Set sh = Sheets("Лист1")
With sh.UsedRange.Columns(2)
     For i = .Rows.Count To 2 Step -1
     If Val(Cells(i, 2).Value) > 100 Then Rows(i).Delete
     Next i
End With 

Изменено: Scripter16.04.2014 08:56:06

 

sashgera

Пользователь

Сообщений: 83
Регистрация: 01.01.1970

Scripter, большое спасибо, все отлично работает!

 

sashgera

Пользователь

Сообщений: 83
Регистрация: 01.01.1970

#6

16.04.2014 03:13:19

Scripter,

только что заметил, не удаляются пустые ячейки,
а в  ячейках, где стоит знак № — все нормально, они не удаляются
если можно поправьте

Код
Dim sh As Worksheet, i As Long
Set sh = Sheets("склад")
With sh.UsedRange.Columns(2)
     For i = .Rows.Count To 5 Step -1
     If Val(Cells(i, 2).Value) > 100 Then Rows(i).Delete
     Next i
End With
 

 [USER=11992][/USER]

 

Scripter

Пользователь

Сообщений: 255
Регистрация: 06.02.2014

#7

16.04.2014 03:38:25

Цитата
sashgera пишет: не удаляются пустые ячейки

добавил проверку на пустые ячейки

Код
Dim sh As Worksheet, i As Long
Set sh = Sheets("склад")
With sh.UsedRange.Columns(2)
   For i = .Rows.Count To 5 Step -1
        If Val(Cells(i, 2).Value) > 100 Or Cells(i, 2).Value = "" Then Rows(i).Delete 
   Next i 
End With

проверка на пустые может быть выполнена разными вариантами:

Cells(i, 2).Value = «»
Cells(i, 2).Value = empty
IsEmpty(Cells(i, 2).Value)

 

sashgera

Пользователь

Сообщений: 83
Регистрация: 01.01.1970

 

sashgera

Пользователь

Сообщений: 83
Регистрация: 01.01.1970

#9

17.04.2014 01:32:16

Scripter, я немного изменил макрос, все работает

УДАЛЯЕМ строку если в ячейке столбца «B» есть число: от 0 до 399
НЕ УДАЛЯЕМ строку если в ячейке столбца «B» есть буква: k
НЕ УДАЛЯЕМ строку если в ячейке столбца «B» есть слово: стал
НЕ УДАЛЯЕМ строку если ячейка столбца «B»- пустая
также макрос удаляет строки если в ячейке столбца «B» есть какой либо текст, кроме ‘k’ и ‘стал’

Код
Sub Макрос22()  
Dim sh As Worksheet, i As Long  
Set sh = Sheets("склад")  
With sh.UsedRange.Columns(2)  
For i = .Rows.Count To 4 Step -1  
If Cells(i, 2).Value <> "k" And Cells(i, 2).Value <> "стал" And Cells(i, 2).Value <> "" And Val(Cells(i, 2).Value) <= 399 Then Rows(i).Delete  
     Next i  
End With  
End Sub 
 

не получается сделать аналогичный макрос
1. НЕ УДАЛЯЛАСЬ строка если в ячейке столбца «B» есть буква: b
2. НЕ УДАЛЯЛАСЬ строка если в ячейке столбца «B» есть слово: стал
3. НЕ УДАЛЯЛАСЬ строка если ячейка столбца «B»- пустая
4. УДАЛЯЛАСЬ строка если в ячейке столбца «B» есть число: от 400 и выше
5. УДАЛЯЛАСЬ строка если в ячейке столбца «B» есть какой либо текст, кроме ‘b’ и ‘стал’
пробовал так, все выполняется, кроме одного — макрос не удаляет строки если в ячейке столбца «B» есть текст

Код
If Cells(i, 2).Value <> "b" And Cells(i, 2).Value <> "стал" And Cells(i, 2).Value <> "" And Val(Cells(i, 2).Value) > 399 Then Rows(i).Delete
 

если можно, пожалуйста, помогите

Прикрепленные файлы

  • test.xlsm (18.34 КБ)

Изменено: sashgera17.04.2014 01:39:50

 

Scripter

Пользователь

Сообщений: 255
Регистрация: 06.02.2014

#10

17.04.2014 04:38:28

так

Код
Sub Макрос5()
Dim sh As Worksheet, i As Long
Set sh = Sheets("склад")
With sh.UsedRange.Columns(2)
For i = .Rows.Count To 2 Step -1
If ((Not IsNumeric(Cells(i, 2).Value) And Cells(i, 2).Value <> "b" And Cells(i, 2).Value <> "стал") _
    Or Val(Cells(i, 2).Value) >= 400) And Cells(i, 2).Value <> "" Then Rows(i).Delete
     Next i
End With
End Sub
 

sashgera

Пользователь

Сообщений: 83
Регистрация: 01.01.1970

#11

17.04.2014 09:26:13

Scripter, спасибо!

First, let me say categorically that there is nothing wrong with loops — they certainly have their place!

Recently we were presented with the below situation:

400000  |  Smith, John| 2.4   | 5.66|   =C1+D1
400001  |  Q, Suzy    | 4.6   | 5.47|   =C2+D2
400002  |  Schmoe, Joe| 3.8   | 0.14|   =C3+D3
Blank   |             |       |     |   #VALUE
Blank   |             |       |     |   #VALUE

The OP wanted to delete rows where Column A is blank, but there is a value in Column E.

I suggest that this is an example where we could make use of SpecialCells and a temporary Error Column to identify the rows to be deleted.

Consider that you might add a column H to try and identify those rows; in that row you could use a formula like below:

=IF(AND(A:A="",E:E<>""),"DELETE THIS ROW","LEAVE THIS ROW")

now, it is possible get that formula to put an error in the rows where I test returns True. The reason we would do this is a feature of Excel called SpecialCells.

In Excel select any empty cell, and in the formula bar type

=NA()

Next, hit F5 or CTRL+G (Go to… on the Edit menu) then click the Special button to show the SpecialCells dialog.

In that dialog, click the radio next to ‘Formulas’ and underneath, clear the checkboxes so that only Errors is selected. Now click OK

Excel should have selected all the cells in the worksheet with an Error (#N/A) in them.

The code below takes advantage of this trick by creating a formula in column H that will put an #N/A in all the rows you want to delete, then calling SpecialCells to find the rows, and clear (delete) them…

    Sub clearCells()
    '
    Dim sFormula As String
    '
    ' this formula put's an error if the test returns true, 
    ' so we can use SpecialCells function to highlight the
    ' rows to be deleted!

Create a formula that will return #NA when the formula returns TRUE

sFormula = "=IF(AND(A:A="""",E:E<>""""),NA(),"""")"

Put that formula in Column H, to find the rows that are to be deleted…

Range("H5:H" & Range("E65536").End(xlUp).Row).Formula = sFormula

Now use SpecialCells to highlight the rows to be deleted:

Range("H5:H" & Range("E65536").End(xlUp).Row).SpecialCells(xlCellTypeFormulas, xlErrors).entirerow.select

This line of code would highlight just Column A by using OFFSET in case instead of deleting the entire row, you wanted to put some text in, or clear it

Range("H5:H" & Range("E65536").End(xlUp).Row).SpecialCells(xlCellTypeFormulas, xlErrors).Offset(0, -7).select

and the below line of code will delete thhe entire row because we can :)

Range("H5:H" & Range("E65536").End(xlUp).Row).SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete shift:=xlup

' clean up the formula
Range("H5:H" & Range("E65536").End(xlUp).Row).Clear
'
End Sub

BTW, it’s also possible WITH A LOOP if you really want one :)

One more thing, before Excel 2010 there was a limit of 8192 rows (I think because this feature went all the way back to 8-bit versions of Excel maybe)

The VBA legend Ron de Bruin (on whose website I first picked up this technique, among others) has something to say about this

Philip

Getting rid of specific cells could prove challenging if you were to do it manually. In this article, we’re going to show you how to make Excel delete rows with value of your choosing, using VBA. You can remove cells with certain strings or create an input cell where you can enter a value to select which cells to remove.

A VBA code to do this will consist of 2 parts: determining the variables, and deleting the rows that where the condition is met. We present you 2 alternative approaches for both parts.

Variables

The variables are the range that test will be applied and the condition itself. You can choose to determine these variables by entering them in the code or create an input section to let the users do this. Entering a static value into the code is easier if you’re consistently working with same range. On the other hand, if range changes, users will have to update the code every time. Here are both approaches for the range F3:F16 and condition the text set to «No»:

Static variable in the code:

Set condition_range = Range("F3:F16")
condition = "No"

Dynamic variable through user input:

Set condition_range = Application.InputBox(Prompt:="Please select the range that condition will be tested:", Type:=8)
condition = Application.InputBox(Prompt:="Please type the condition text:")

Here, the user entries can be collected with the Application.InputBox control and we must also set the Type argument to 8 to select all ranges. If the Type argument is omitted, the default input type will be Text.

We recommend using an error handling method in your code to handle the case of a user pressing Cancel in the InputBox instead of providing the requested information. Our error handling approach uses 3 types of code blocks:

Error handling part before End Sub:

error_handling:
MsgBox ("Process is canceled.") 'Explanatory message for end-user
End Sub

Move the process to error handling code part:

On Error GoTo error_handling

Reset error handling procedure:

On Error GoTo 0

Rows

You have 2 options to determine the rows to be deleted. You can either perform a loop through the rows and apply a logical condition test, or use the VBA support of the AutoFilter feature to filter the rows that meet the condition. The decision criteria between two approaches will determine whether the data will be kept.

The AutoFilter feature won’t work if your range is defined as an Excel Table. As a result, we suggest you to return your table into a regular range before running AutoFilter code. On the other hand, if your data spans over thousands of rows, looping through rows will require more computer resources and take longer to process. Let’s see code blocks for both approaches:

Looping through rows:

With condition_range

    For i = .SpecialCells(xlCellTypeLastCell).Row To .Row Step -1

        If Cells(i, .Column) = condition Then Rows(i).EntireRow.Delete

    Next i

End With

AutoFilter:

condition_range.AutoFilter Field:=1, Criteria1:=condition
Rows(condition_range.EntireRow.Address).Delete Shift:=xlUp

First, you need to add the module into the workbook or the add-in file. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.

Delete rows by a static condition with loop

Sub DeleteRowsByStaticCondition_Loop()

'defining variables

Dim condition_range As Range

Dim condition As String

Dim i As Integer

'populating variables

Set condition_range = Range("F:F")

condition = "No"

'loop through rows and test the condition

With condition_range

    For i = Cells(.SpecialCells(xlCellTypeLastCell).Row, .Column).Row To 1 Step -1

        If Cells(i, .Column) = condition Then Rows(i).EntireRow.Delete

    Next i

End With

End Sub

Delete rows by a dynamic condition with loop

Sub DeleteRowsByUserCondition_Loop()

'defining variables

Dim condition_range As Range

Dim condition As String

Dim i As Integer

'error handling for Cancel buttons of InputBox controls

On Error GoTo error_handling

'populating variables

Set condition_range = Application.InputBox(Prompt:="Please select the range that condition will be tested:", Type:=8)

condition = Application.InputBox(Prompt:="Please type the condition text:")

'reset error handling procedure

On Error GoTo 0

'loop through rows and test the condition

With condition_range

    For i = .SpecialCells(xlCellTypeLastCell).Row To .Row Step -1

        If Cells(i, .Column) = condition Then Rows(i).EntireRow.Delete

    Next i

End With

'exit sub without running error handling codes

Exit Sub

'error handling

error_handling:

MsgBox ("Process is canceled.") 'Explanatory message for end-user

End Sub

Delete rows by a static condition with AutoFilter

Sub DeleteRowsByStaticCondition_AutoFilter()

    'defining variables

    Dim condition_range As Range

    Dim condition As String

    'populating variables

    Set condition_range = Range("$F:$F")

    condition = "No"

    'applying AutoFilter

    condition_range.AutoFilter Field:=1, Criteria1:=condition

    'deleting filtered rows, remaining rows will be shifted to up

    Rows(condition_range.EntireRow.Address).Delete Shift:=xlUp

    'removing AutoFilter

    On Error Resume Next

    ActiveSheet.condition_range.ShowAllData

    'selecting a cell for end-user

    condition_range.Cells(1, 1).Select

End Sub

Delete rows by a dynamic condition with AutoFilter

Sub DeleteRowsByUserCondition_AutoFilter()

    'defining variables

    Dim condition_range As Range

    Dim condition As String

    'populating variables

    Set condition_range = Application.InputBox(Prompt:="Please select the range that condition will be tested:", Type:=8)

    condition = Application.InputBox(Prompt:="Please type the condition text:")

    'applying AutoFilter

    condition_range.AutoFilter Field:=1, Criteria1:=condition

    'deleting filtered rows, remaining rows will be shifted to up

    Rows(condition_range.EntireRow.Address).Delete Shift:=xlUp

    'removing AutoFilter

    On Error Resume Next

    ActiveSheet.condition_range.ShowAllData

    'selecting a cell for end-user

    condition_range.Cells(1, 1).Select

End Sub

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Sub DeleteRowsEnhancedSafety()
    Dim i As Long, n As Long, m As Long, k As Long
    Dim rng As Range, arr() As Variant, response As VbMsgBoxResult
    Set rng = Cells(Cells.Rows.Count, 1)
    'Формируем массив, состоящий из значений столбцов "A" и "B"
    'от первой строки до последней заполненной в столбце "A".
    If Not IsEmpty(rng) Then Set rng = Range("A:B") Else Set rng = Range(Range("B1"), rng.End(xlUp))
    arr = rng
    'Формируем из данного массива новый, во втором столбце которого
    'нет значений, эквивалентных константе vbNullString.
    n = UBound(arr)
 
    'Вычислим количество непустых ячеек в диапазоне столбца "B".
    'При этом адрес диапазона передается в том же стиле ссылок,
    'который выставлен в приложении. В противном случае может
    'возникнуть ситуация, когда в приложении используется стиль
    'ссылок R1C1, а мы передаем ей адрес в стиле A1. В этом случае
    'функция не сможет распознать адрес и вернет ошибку (а ошибки
    'со значениями не сравниваются - "Type Mismatch"!)
 
    m = n - Evaluate("COUNTBLANK(" & rng.Columns(2).Address(ReferenceStyle:=Application.ReferenceStyle) & ")")
    'Альтернативная поправка для предыдущей строки.
    'm = n - Application.WorksheetFunction.CountBlank(rng.Columns(2))
 
    'Учтем случай, когда в столбце "B" есть только пустые ячейки и ячейки с vbNullString.
    If m = 0 Then
        response = MsgBox("В столбце ""B"" есть только пустые ячейки и ячейки с vbNullString. Удалить все значения столбцов ""A"" и ""B""?", vbYesNo, "Потверждение операции")
        If response = vbYes Then Range("A:B").Clear Else MsgBox "Операция отменена пользователем.", , "Информация"
        Exit Sub
    End If
    ReDim arr2(1 To m, 1 To 2) As Variant
    For i = 1 To n
        'Учтем случай, когда столбец "B" содержит коды ошибок (которые несравнимы с vbNullString)
        If IsError(arr(i, 2)) Then
            k = k + 1
            arr2(k, 1) = arr(i, 1)
            arr2(k, 2) = arr(i, 2)
        ElseIf arr(i, 2) <> vbNullString Then
            k = k + 1
            arr2(k, 1) = arr(i, 1)
            arr2(k, 2) = arr(i, 2)
        End If
    Next i
 
    'Очищаем столбцы "A:B" от старых данных.
    Range("A:B").Clear
    'Выгружаем на лист сформированный массив.
    Cells(1).Resize(m, 2) = arr2
End Sub

Макрос удаляющий строки по условию

Mark1976

Дата: Воскресенье, 01.05.2016, 11:21 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

Всем привет. С праздниками. Есть таблица. Мне надо, чтобы макрос удалил определенные строки. На примере. Надо удалить строки, где встречается название: Аптека3,Аптека5. Как это можно реализовать? Заранее спасибо.

К сообщению приложен файл:

__.xlsx
(10.3 Kb)

 

Ответить

wild_pig

Дата: Воскресенье, 01.05.2016, 11:40 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 516


Репутация:

97

±

Замечаний:
0% ±


2003, 2013

[vba]

Код

Sub uuu()
    x = Application.InputBox(«Выбираем ячейку с нужным значением», Type:=2)
    Application.ScreenUpdating = False
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If Cells(i, 1) = x Then Rows(i).Delete
    Next
    Application.ScreenUpdating = True
End Sub

[/vba]

 

Ответить

Mark1976

Дата: Воскресенье, 01.05.2016, 11:51 |
Сообщение № 3

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

wild_pig, отлично. Но мне надо в самом макросе прописать, что удалять. У меня список из 68 аптек. Желательно в макросе прописать: аптека1, аптека2. Так как все аптеки имеют разные категории, и в отчетах мне надо оставлять разные аптеки.

 

Ответить

wild_pig

Дата: Воскресенье, 01.05.2016, 11:56 |
Сообщение № 4

Группа: Проверенные

Ранг: Обитатель

Сообщений: 516


Репутация:

97

±

Замечаний:
0% ±


2003, 2013

И каждый раз менять в макросе список аптек?

 

Ответить

wild_pig

Дата: Воскресенье, 01.05.2016, 12:00 |
Сообщение № 5

Группа: Проверенные

Ранг: Обитатель

Сообщений: 516


Репутация:

97

±

Замечаний:
0% ±


2003, 2013

[vba]

Код

Sub uuu()
    аптеки = «Аптека3, Аптека5»
    Application.ScreenUpdating = False
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If InStr(аптеки, Cells(i, 1)) > 0 Then Rows(i).Delete
    Next
    Application.ScreenUpdating = True
End Sub

[/vba]

 

Ответить

Mark1976

Дата: Воскресенье, 01.05.2016, 12:06 |
Сообщение № 6

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

wild_pig, я сделаю несколько макросов со списками. Огромное спасибо. Сейчас протестирую

 

Ответить

Mark1976

Дата: Воскресенье, 01.05.2016, 12:53 |
Сообщение № 7

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

wild_pig, Спасибо. Супер !!!

 

Ответить

StoTisteg

Дата: Воскресенье, 01.05.2016, 13:02 |
Сообщение № 8

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

Mark1976, проще сделать форму, в которую подгружать список аптек и уже в ней ручками выделять, а не прописывать в макросе.


Интуитивно понятный код — это когда интуитивно понятно, что это код.

Сообщение отредактировал StoTistegВоскресенье, 01.05.2016, 14:35

 

Ответить

Mark1976

Дата: Воскресенье, 01.05.2016, 15:34 |
Сообщение № 9

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

StoTisteg, пока не представляю как это будет. Макрос отработал на отлично.

 

Ответить

Mark1976

Дата: Воскресенье, 01.05.2016, 15:38 |
Сообщение № 10

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

wild_pig, а есть такая возможность прописать, (удалить все , кроме аптека1). Дело в том что есть отчет который формирует список из 63 аптек и выбрать одну не дает, а мне нужна инфа по одной аптеке. Вот и прописать бы (удалить все, кроме….)?

 

Ответить

StoTisteg

Дата: Воскресенье, 01.05.2016, 16:58 |
Сообщение № 11

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

StoTisteg, пока не представляю как это будет.

Так и будет.


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

StoTisteg

Дата: Воскресенье, 01.05.2016, 17:04 |
Сообщение № 12

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

мне нужна инфа по одной аптеке

Из конкретного файла выбираем просто фильтром. Макрос нужен тогда, либо файлов неизвестно сколько и чёрт знает сколько там надо отобрать аптек, либо конечный результат предназначен для дальнейшей обработки макросом. А так всё просто.


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

Mark1976

Дата: Воскресенье, 01.05.2016, 17:09 |
Сообщение № 13

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

StoTisteg, не понял как это работает

 

Ответить

Mark1976

Дата: Воскресенье, 01.05.2016, 17:14 |
Сообщение № 14

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

StoTisteg, разобрался. Прикольно.

 

Ответить

StoTisteg

Дата: Воскресенье, 01.05.2016, 17:15 |
Сообщение № 15

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

Mark1976, Вы уже который раз не можете чётко сформулировать, что Вам собственно надо. И я уже второй раз Вам советую научиться хотя бы элементарным вещам. Потому что если бы Вы сразу сказали

мне нужна инфа по одной аптеке

Вам бы либо сразу и посоветовали фильтр, либо Вам бы не составило большого труда добавить в мой макрос ещё и галку «выбрать всё» и по её состоянию либо отбирать, либо наоборот удалять отобранное.


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

StoTisteg

Дата: Воскресенье, 01.05.2016, 17:17 |
Сообщение № 16

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

не понял как это работает

Это я просто кнопку забыл повесить…

К сообщению приложен файл:

0960390.rar
(25.0 Kb)


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

Mark1976

Дата: Воскресенье, 01.05.2016, 17:19 |
Сообщение № 17

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

StoTisteg, супер. Вам ребята просто большое человеческое спасибо.

 

Ответить

Mark1976

Дата: Воскресенье, 01.05.2016, 17:22 |
Сообщение № 18

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

StoTisteg, StoTisteg, см личное сообщение.

 

Ответить

Mark1976

Дата: Воскресенье, 01.05.2016, 17:24 |
Сообщение № 19

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

StoTisteg, мысли не сразу приходят.

 

Ответить

Прежде чем перейти к теме статьи, разберемся, с чем мы будем иметь дело. Посмотрим на иерархию объектов в Excel. Рабочая книга (Workbook) – это файл Excel, содержащий рабочие листы. Рабочий лист (Worksheet), в свою очередь, представляет собой электронную таблицу, основной тип документа, который используется приложением Excel для хранения и обработки данных. Рабочие листы — это таблицы, состоящие из ячеек, организованных в столбцы и строки и являются частью рабочей книги. Основным элементом электронной таблицы является ячейка. Именно в ячейках содержится информация – текст, значения, формулы. Каждая ячейка имеет свой адрес – номер строки и номер столбца, на пересечении которых находится ячейка. В этой статье более подробно остановимся на строках.

Количество строк в Excel 2003 – 65 536, а число строк в Excel 2007 и Excel 2010 – уже 1 048 576. Наиболее частыми действиями со строками являются копирование, вставка, добавление новых строк, удаление и скрытие. Без особого труда можно преобразовать Excel строку в столбец и наоборот. Такое преобразование называется транспонированием. Для преобразования строки в столбец необходимо скопировать данные строки, после чего нажать правую кнопку мыши и из контекстного меню выбрать пункт «Специальная вставка…». В появившемся диалоговом окне «Специальная вставка» поставить галочку в поле «транспонировать» и нажать кнопку ОК.

как транспонировать строку в столбец

Все манипуляции со строками не представляют какой-либо особой сложности, но задача существенно усложняется, когда работать приходится с большими объемами данных и в особых условиях, когда к примеру нельзя воспользоваться стандартными средствами Excel, такими как сортировка. В таких случаях на помощь как всегда приходят макросы VBA. С помощью макросов VBA Excel строки легко поддаются обработке, можно например скрыть все пустые строки и или удалить строки содержащие заданный текст.

Далее рассмотрим инструмент, в котором реализовано программное скрытие и удаление пустых строк, а также скрытие и удаление любых строк, по заданным пользователем условиям, при этом все параметры для работы программы задаются не в редакторе программного кода, а в диалоговом окне, что очень удобно. Надстройка работает как с видимыми так и со скрытыми и отфильтрованными строками.

Надстройка для удаления и скрытия строк по условию

Надстройка позволяет:

1) Скрывать либо удалять строки, подходящие под заданное условие;

2) скрывать либо удалять строки, находящиеся ниже или выше строк, подходящих под заданное условие;

3) скрывать либо удалять заданное количество строк для каждого действия;

4) скрывать либо удалять разное количество строк для каждого действия, если количество строк указано в отдельном столбце;

5) выбирать одно из нескольких условий для искомых значений (совпадает, не совпадает, содержит, не содержит, начинается, не начинается, заканчивается, не заканчивается);

6) находить пустые строки и строки, содержащие заданный текст (либо массив из текстовых значений);

7) осуществлять одновременный поиск различных текстовых выражений, внесенных в поле для ввода текста с использованием знака-разделителя. В качестве знака-разделителя используется (;) точка с запятой;

8) выбирать различные диапазоны для обработки данных;

9) ограничивать выбранные диапазоны номерами строк сверху и/или снизу для избежания повреждения шапок таблиц и строк с разного рода промежуточными итогами;

10) осуществлять поиск текста в строках как с учетом регистра, так и без.

Диалоговое окно надстройки

udalenie i skrytie strok po usloviyuCompleteSolutionмакрос (надстройка) для удаления/скрытия пустых строк и строк по условию

По изображению диалогового окна можно получить представление о том, какие возможности предоставляются надстройкой — это удаление/скрытие пустых строк и строк, подходящих под заданные условия.

Как скрыть или удалить строки по условию?

На выбор пользователя макрос может удалять/скрывать пустые строки, а может на выбор пользователя скрывать либо удалять строки, удовлетворяющие заданным условиям, например таким как содержание заданного текста, либо отсутствием такового, может учитывать регистр при поиске текста в строках, а может не учитывать. Для того, чтобы при удалении/скрытии в таблицах не пострадала шапка или промежуточные результаты, введено дополнительное ограничение по номерам строк, при помощи которого можно задавать диапазон для действия макроса. Если же диапазон не задан пользователем, то макрос работает со строками так называемого используемого диапазона, то есть со строки, в которой содержится первая заполненная информацией ячейка, до строки с последней заполненной ячейкой. Пользователю также предлагается ограничить обработку данных либо активным листом, либо всеми листами активной рабочей книги.

При помощи надстройки можно производить действия не только с самими строками, которые подходят под заданное условие, но и со строками, которые находятся выше или ниже этих строк. Кроме того, предусмотрена возможность задать количество строк для каждого действия.

Как скрывать или удалять разное количество строк?

Если в диалоговом окне надстройки установить флажок в поле «Разное количество строк», то числовое значение в поле «Для каждого действия, шт.» меняется на номер столбца, в котором содержатся значения для каждого действия. В этом случае за каждое действие будет скрыто или удалено столько строк, сколько указано в соответствующей строке заданного столбца.

raznoe kolichestvo udalyaemyh strok

Как скрывать или удалять строки со служебными символами?

При необходимости удаления или скрытия строк со служебными символами, такими как звездочка или знак вопроса, в строке поиска необходимо перед искомым знаком поставить символ «~» тильда, это сигнализирует приложению Excel о том, что следующий за тильдой знак перестает выполнять свои служебные функции и становится обычным символом.

Другие материалы по теме:

Понравилась статья? Поделить с друзьями:
  • Макрос excel для сортировки данных
  • Макрос excel границы ячеек
  • Макрос excel для скрытия листа
  • Макрос excel границы таблицы
  • Макрос excel для продвинутых