Удалить текст при условии excel

Хитрости »

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


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

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

Способ первый:
Использовать встроенное средство 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
ссылки
статистика

 

anat

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

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

Здравствуйте!
Прошу помощи.

Дано: столбец А — текст, который набирается вручную. Столбец Б — данет.
Требуется: в случае, когда в столбце Б стоит «да», удалить текст именно в этой ячейке столбца А.
То есть, если Б1 = «да», весь текст в А1 удаляется.
Не макросом!!

Спасибо!

 

ber$erk

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

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

и как Вы себе это представляете?

Учимся сами и помогаем другим…

 

anat

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

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

Вот и спрашиваю…
Можно не удалить, а заменить на другой определенный текст, скажет «Данных нет».

Изменено: anat09.03.2015 19:18:59

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

#4

09.03.2015 13:45:47

Код
=ЕСЛИ(B1="Да";"";"Какой-то текст")

Еще можно условное форматирование применить. См вложение.

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

  • YesNo.xlsx (8.08 КБ)

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Leanna

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

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

Нет, такое только макросом возможно.

Работать надо не 12 часов, а головой.

 

anat

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

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

The_Prist, меняться должно содержимое ячейки А1.

Leanna, а как? И еще вопрос: этой таблицей будут пользоваться люди на других компах, макросы будут работать? Файл хранится в сети.

 

Сергей

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

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

мож так пойдет меняйте в столбце Б да нет

Изменено: Сергей09.03.2015 13:53:41
(пока варганил пример Дмитрий уже выложил тоже УФ)

Лень двигатель прогресса, доказано!!!

 

anat

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

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

The_Prist, условное форматирование — увы, клиент требует удалить данные.

 

anat

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

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

Сергей, увы, как раз ответила выше

 

Leanna

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

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

Макросы будут работать если они их включат. По умолчанию вроде обычно безопасность выставлена отключать макросы.
Если хотите макросами прикладывайте файл-пример.

Работать надо не 12 часов, а головой.

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

#11

09.03.2015 13:55:08

Цитата
anat написал: увы, клиент требует удалить данные

Увы, тогда Вы должны отказать клиенту, потому как без макросов удалить данные в ячейках нельзя. Пусть тогда при выборе «Да» удаляет сам руками.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

anat

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

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

#12

09.03.2015 14:00:31

Понятно…
Спасибо всем!

  • Редакция Кодкампа

17 авг. 2022 г.
читать 2 мин


Вы можете использовать следующие основные формулы для удаления определенного текста из ячеек в Excel:

Способ 1: удалить один конкретный текст

=SUBSTITUTE( A1 ,"text1","")

Эта конкретная формула удаляет «text1» из ячейки A1 .

Способ 2: удалить несколько определенных текстов

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( A1 ,"text1",""),"text2",""),"text3","")

Эта конкретная формула удаляет «текст1», «текст2» и «текст3» из ячейки A1 .

В следующих примерах показано, как использовать каждый метод на практике.

Пример 1: удалить один конкретный текст

Предположим, у нас есть следующий столбец в Excel, в котором показаны позиции 15 разных баскетболистов:

Мы можем использовать следующую формулу, чтобы удалить «r» из каждого имени позиции:

=SUBSTITUTE( A2 ,"r","")

Мы можем ввести эту формулу в ячейку B2 , а затем скопировать и вставить ее в каждую оставшуюся ячейку в столбце B:

Excel удалить определенный текст из ячейки

Обратите внимание, что буква «r» была удалена из всех названий позиций.

Пример 2. Удаление нескольких определенных текстов

Предположим, у нас есть следующий столбец в Excel, который показывает имя пользователя для 10 разных людей на каком-то веб-сайте:

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

  • тире ( )
  • восклицательные знаки ( ! )
  • число 5 ( 5 )

Для этого мы можем использовать следующую формулу:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( A2 ,"-",""),"!",""),"5","")

Мы можем ввести эту формулу в ячейку B2 , а затем скопировать и вставить ее в каждую оставшуюся ячейку в столбце B:

Обратите внимание, что все «-», «!» и «5» были удалены из каждого имени пользователя.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в Excel:

Excel: как проверить, содержит ли ячейка частичный текст
Excel: как проверить, содержит ли ячейка текст из списка
Excel: как рассчитать среднее значение, если ячейка содержит текст
Excel: как подсчитать частоту текста

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

  • Удалите строки на основе одного значения ячейки с помощью функции поиска и замены
  • Удалить строки на основе одного значения ячейки с кодом VBA
  • Удалять строки на основе одного или двух значений ячеек
  • Удаление строк на основе нескольких значений ячеек

Удалите строки на основе значения ячейки с помощью функции поиска и замены

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

1. Выберите диапазон, в котором вы будете удалять строки на основе определенного значения ячейки, и откройте диалоговое окно «Найти и заменить», нажав кнопку Ctrl + F ключи одновременно.

2. В диалоговом окне «Найти и заменить» введите определенное значение ячейки (в нашем случае мы вводим Soe) в Find what и нажмите Find All кнопка. См. Первый снимок экрана ниже:

3. Выберите все результаты поиска в нижней части диалогового окна «Найти и заменить» и закройте это диалоговое окно. (Внимание: Вы можете выбрать один из результатов поиска, а затем Ctrl + A клавиши для выбора всех найденных результатов. См. Второй снимок экрана выше.)
И тогда вы можете увидеть, что все ячейки, содержащие определенное значение, выбраны.

4. Щелкните правой кнопкой мыши выбранные ячейки и выберите Delete из контекстного меню. А затем проверьте Entire row во всплывающем диалоговом окне Удалить и щелкните OK кнопка. Теперь вы увидите, что все ячейки, содержащие определенное значение, удалены. Смотрите скриншоты ниже:

А затем были удалены целые строки на основе уже определенного значения.


Удалить строки на основе значения ячейки с кодом VBA

С помощью следующего кода VBA вы можете быстро удалить строки с определенным значением ячейки, выполните следующие действия:

1, нажмите Alt + F11 ключи одновременно, чтобы открыть Microsoft Visual Basic for applications окно,

2. Нажмите Insert > Module, и введите в модуль следующий код:

VBA: удалить целые строки на основе значения ячейки

Sub DeleteRows()
'Updateby20211217
Dim rng As Range
Dim InputRng As Range
Dim DeleteRng As Range
Dim DeleteStr As String
Dim xTitleId As String
Dim xArr
Dim xF As Integer
Dim xWSh As Worksheet
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set rng = Application.Selection
Set InputRng = Application.InputBox("Range :", xTitleId, rng.Address, Type:=8)
If InputRng Is Nothing Then Exit Sub
DeleteStr = Application.InputBox("Delete Text", xTitleId, Type:=2)
Set xWSh = InputRng.Worksheet
For Each rng In InputRng
    If rng.Value = DeleteStr Then
        If DeleteRng Is Nothing Then
            Set DeleteRng = rng
        Else
            Set DeleteRng = Application.Union(DeleteRng, rng)
            Set DeleteRng = DeleteRng.EntireRow
        End If
    End If
Next
xArr = Split(DeleteRng.AddressLocal, ",")
DeleteRng.Select
DeleteRng.Delete
For xF = UBound(xArr) To 0 Step -1
    Set DeleteRng = xWSh.Range(xArr(xF))
    DeleteRng.Delete
Next
End Sub

3, Затем нажмите Run кнопку для запуска кода.

4. Во всплывающем диалоговом окне выберите диапазон, в котором вы будете удалять строки на основе определенного значения, и нажмите кнопку OK кнопку.

5. В другом диалоговом окне введите определенное значение, на основе которого вы будете удалять строки, и нажмите кнопку OK кнопка. Смотрите скриншот:

И тогда вы увидите, что целые строки были удалены на основе уже указанного значения.


Удалить строки на основе одного или двух значений ячейки с помощью Kutools for Excel

Если вы установили Kutools for Excel, Его Select Specific Cells Функция может помочь вам быстро удалить строки с определенным значением. Пожалуйста, сделайте следующее:

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now

1. Выберите диапазон, в котором вы будете удалять строки на основе определенного значения, и нажмите Kutools > Select > Select Specific Cells. Смотрите скриншот:

2. В открывшемся диалоговом окне Select Specified Cells установите флажок Entire row выберите, выберите Contains от Specific type раскрывающийся список, введите указанное значение в правое поле и щелкните значок Ok кнопку (см. снимок экрана выше).
После применения этой функции появится диалоговое окно, в котором будет показано, сколько ячеек было найдено в соответствии с указанными критериями. Пожалуйста, нажмите на OK чтобы закрыть его.

3. Теперь выбираются целые строки с определенным значением. Щелкните правой кнопкой мыши выбранные строки и щелкните значок Delete из контекстного меню. Смотрите скриншот ниже:

Внимание: Это Select Specific Cells функция поддерживает удаление строк на одно или два определенных значения. Для удаления строк на основе двух указанных значений укажите другое значение в поле Specific type раздел диалогового окна Select Specific Cells, как показано на следующем снимке экрана:

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now


Удалить строки на основе нескольких значений ячеек с помощью Kutools for Excel

В некоторых случаях вам может потребоваться удалить строки на основе нескольких значений ячеек из другого столбца / списка в Excel. Здесь я представлю Kutools for Excel‘s Select Same & Different Cells функция, чтобы быстро и легко решить эту проблему.

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now

1. Нажмите Kutools > Select > Select Same & Different Cells , чтобы открыть диалоговое окно Выбрать одинаковые и разные ячейки.

2. В открытии Select Same & Different Cells диалоговое окно, сделайте следующее (см. снимок экрана):

(1) В Find values in поле, выберите столбец, в котором вы найдете определенные значения;
(2) В According to поле, выберите столбец / список с несколькими значениями, на основе которых вы будете удалять строки;
(3) В Based on раздел, пожалуйста, проверьте Each row вариант;
(4) В Find раздел, пожалуйста, проверьте Same Values вариант;
(5) Проверьте Select entire rows опция внизу открывающегося диалогового окна.
Внимание: Если два указанных столбца содержат один и тот же заголовок, проверьте My data has headers опцию.

3, Нажмите Ok кнопку, чтобы применить эту утилиту. Затем появляется диалоговое окно, в котором показано, сколько строк было выбрано. Просто нажмите на OK чтобы закрыть его.

Затем были выбраны все строки, содержащие значения из указанного списка.

4. Нажмите Home > Delete > Delete Sheet Rows для удаления всех выбранных строк.


Демо: удаление строк на основе одного или нескольких значений ячеек в Excel


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

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

Удаление текста справа или слеваФункции, которая отрезает лишнее количество символов в ячейке, найти не удается, но существует система из двух функций, которые можно применить. Это система из функции ЛЕВСИМВ (или ПРАВСИМВ) и функции ДЛСТР (длина строки).

Рассмотрим их применение.

    Вначале находим количество символов в тексте при помощи функции ДЛСТР. Для этого запускаем менеджер функций, выбираем ДЛСТР, указываем ячейку с текстом. Функция ДЛСТР посчитает количество символов.

    Зная длину лишнего текста — 6 знаков в индексе, вычитаем их из общего числа символов посчитанных функцией ДЛСТР и получаем то количество символов, которое должно остаться в тексте, когда удалим индекс.

    Полученное значение – количество оставляемых в тексте знаков, вписываем в функцию ЛЕВСИМВ или ПРАВСИМВ. Если нужно удалить знаки справа, то используем ЛЕВСИМВ, если слева, то ПРАВСИМВ. Нажимаем «Enter». Функция ЛЕВСИМВ или ПРАВСИМВ присваивает ячейке нужное нам количество символов из текста в новую ячейку, исключая ненужный нам индекс.

    Для уменьшения количества ячеек с расчетами эти функции можно записать в систему следующего вида:

    ПРАВСИМВ(…*¹;(ДЛСТР(…*¹)-6)).

    Где …*¹- адрес ячейки, из которой берем текст.

    Как в Эксель (Excel) удалить строки по условию?

    Как в Excel быстро удалить строки, содержимое которых удовлетворяет определённому условию?

    Это удобно сделать с помощью фильтра.

    Имеем таблицу данных с заголовком.

    Щелкаем на любом месте в заголовке и выбираем на Главной вкладке пункт «Сортировка и фильтр — фильтр».

    Фильтруем содержимое таблицы по требуемым условиям, по одному или нескольким столбцам.

    Оставшиеся после применения фильтра ячейки / строки выделяем все вместе и выбираем пункт «Удалить строки с листа» (можно выбрать пункт «Удалить — строку» в меню после щелчка правой кнопкой мыши на выделенной ячейке).

    Удалились именно те строки, которые были отфильтрованы, остальные остались на месте (нужно убрать все фильтры, чтобы их увидеть).

    Я знаю 2 способа, позволяющих удалить определённые строки в Эксель (Excel).

    1 способ — с помощью фильтра.

    2 способ — с помощью VBA.

    Расскажу о каждом способе подробно.

    Если это делать с помощью фильтра, то порядок действий такой:

    1) Отбираем нужные строки.

    3) Убираем фильтр.

    В результате в таблице останется только то, что нужно.

    В таблице содержаться сведения о товарах и странах-производител­ ях, нужно оставить только импортные товары (то есть удалить строки, где содержится «Россия»).

    1) Так как нас интересуют строки с определённым значением, то можно поставить фильтр так:

    Щёлкнуть по любой ячейке с надписью «Россия» правой кнопкой мыши, а затем в контекстном меню выбрать пункт «Фильтр по значению выделенной ячейки».

    2) В итоге останутся видимыми только те строки, которые требуется удалить.

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

    3) Строки удалятся, и таблица будет пустой (так как там пока стоит фильтр).

    4) Снимаем фильтр с помощью кнопки на панели инструментов «Сортировка и фильтр».

    Теперь можно убедиться, что в таблице остались строчки с только импортными товарами.

    Нужно оставить только фрукты, стоящие > 100 рублей.

    Здесь фильтр по значению ячейки уже не подойдёт, поэтому поступаем по-другому:

    1) Щёлкаем левой кнопкой мыши по любой ячейке столбца с ценой и вызываем фильтр — с помощью копки «Фильтр» на вкладке «Данные» или с помощью копки «Сортировка и фильтр» на вкладке «Главная».

    2) Теперь щёлкаем по специальной стрелочке на столбце с ценой, и выбираем «Числовые фильтры» -> «Меньше».

    3) В появившемся окне вводим 100 и нажимаем на «OK».

    4) Останутся строки с ценой 100.

    Для удаления строк по определённому условию в VBA можно написать цикл, в котором перебираются все строки и одна (несколько) ячеек сравниваются с определённым значением.

    Если условие выполняется, тогда удаляем строку с помощью команды Delete.

    Создаём кнопку и привязываем к ней код (это самое простое, что можно придумать):

    Dim i As Integer

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

    Как удалить строки в Excel по условию? Удаление и скрытие пустых строк и строк, содержащих заданное значение

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

    Строки в 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) осуществлять поиск текста в строках как с учетом регистра, так и без.

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

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

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

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

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

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

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

    Удаление (скрытие) строк по условию

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

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

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

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

    • 191594 просмотра

    Комментарии

    Я не занимаюсь поддержкой бесплатных макросов, и модификацией их под ваши требования.

    В комментариях к статье есть очень много вариантов переделки этого макроса, — полистайте комменты, может найдете подходящий вариант кода.
    Если же хотите получить готовое решение, — оформляйте заказ на сайте, сделаю (платно. минимальная стоимость заказа 1500 рублей)

    Добавление комментариев к данной статье на этом отключаю.

    Подскажите пожалуйста. Мучаюсь уже неделю. Не могу переделать существующие макросы для скрытия строк. Имеется таблица с цифрами. Нужно что бы скрывались строки если одновременно в столбце А и В и С и D значение меньше чем 0. Было бы не плохо это значение вводить в user form и там были кнопочки скрыть и показать все. Помогите пожалуйста. Да и ещё количество строк может бить разное. А цифровые значения начинаются с второй строки.

    Здравствуйте, у меня такая ситуация. Есть таблица, с 3000 строками, и примерно 25 столбиками
    Первые 10 столбиков заполнены текстом, с 11 по 25 столбик бывают цифры. Как мне удалить полностью строку, если в столбики с 11 по 25 все пустые ячейки ? а если хоть одна ячейка заполнена, то строку не трогать? но на первые десять столбиков не надо обращать внимание

    А как сделать такое же условие для объеденных ячеек только по нескольким значениям?

    Я должен был догадаться, какие листы надо обрабатывать, а какие нет?
    Чтобы обработать ВСЕ листы, — напишите

    Большое спасибо, но у меня следующие листы «3», «3А», «3Б», «4».

    Подскажите, как сделать этот макрос для листов «2», «2А», «2Б» и т. д.

    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

    Если необходимо наоборот отобразить строки «EntireRow.Hidden = False»
    То как осуществить поиск текста в скрытых строках/столбцах?

    Здравствуйте. Подскажите, пожалуйста, как прописать макрос так, чтоб он:
    1. удалял все строки с заливкой цветом, или
    2. удалял все строки, содержащие какую либо ячейку с заливкой цветом.
    Спасибо.

    Игорь,благодарю за макрос — облегчает жизнь! Вы не посоветуете как работать с этим макросом при защите листа?

    Добрый день! Подскажите пожалуйста, Как сделать макрос скрывающий строки при условии что в двух подряд столбцах 0 или пусто? и чтоб он запускался не при открытии файла, а кнопкой?
    у меня вариант с условием одного столбца, как его исправить

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim d As Integer
    d = UsedRange.Rows.Count + 1
    For rwIndex = 1 To 31
    colIndex = 3
    If Cells(rwIndex, colIndex).Value = 0 Then
    Rows(rwIndex).Hidden = True
    End If
    Next
    End Sub

    Буду очень признательна)

    Добрый день! У меня проблема с большими таблицами и с их колличеством) В одной книге у меня 25 листов на каждом большие таблицы, для удбства печати я создала макрос скрывающий ненужные строки, столбцы и ячейки во всей книге сразу, поочередно на каждом листе. Теперь хочу чтоб можно было сразу во всей книге развернуть скрытые ячейки. И не могу) Подскажите как исправить этот макрос чтоб он работал в модуле «Эта книга» для всех листов сразу

    Sub Show()
    Columns.Hidden = False
    Rows.Hidden = False

    Во — то что доктор прописал — спасибо! И извините за не корректность:)

    Сандер, я написал код так, как вы просили, — если в ячейке присутствует цифра, то строка удаляется.
    А вам надо было удалять только ячейки с ЧИСЛОМ (а не содержащие цифры)
    Замените

    Увы. работает аналогично с «Удаление (скрытие) строк по условию», т.е. если в тексте присутствует допустим «Адаптер АТ-2000 14 В22» — что там, что в вашем примере удаляет строку. Просто думал — есть что-нить персональное с цифрами.

    Сандер, так попробуйте:

    Здравствуйте! Пролистал, прочитал — таки не нашел ответ к своей задаче, а она такова: в столбце чередуются и текст и цифры — надо удалить строки которые содержат цифры(они естно — разные). Спасибо!

    Евгений, при работе макросов, отмена действий в Excel не работает
    (что сделано макросом, никак не отменить, — так устроен Excel)

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

    Здравствуйте, Нурьяна.
    Моя программа нормально работает, — если ей правильно настроить
    (настройка под каждый конкретный сайт, — от 1500 руб, + сама программа 2500 стоит)

    PS: на будущее, размещайте коммент не в первой попавшейся статье, а в статье с описанием программы-парсера
    http://excelvba.ru/programmes/Parser
    можете сразу оформить заказ на парсер, в таком виде:
    http://excelvba.ru/programmes/Parser/order

    Здравствуй Админ! Долго Вас искала. подрабатываю на СП закупках, и уже замучилась с заполнением каталогов, сил больше нет. Как-то покупала граббер у одного программиста, ну вообще не довольна , на одну закупку граббер стоит 2800, и работает через раз. Скажите как работает Ваша программа и сколько стоит, и можно ее настроить под сайт на котором я работаю и пользоваться ею постоянно один раз заплатив?

    Можем сделать под заказ, — всё будет работать как надо.

    Хоть убейте — не работает. Идея в том, что макрос срабатывает при нажатии на ячейку. Берет значение из текущей активной строки и 2 столбца, ищет на другом листе и должен его просто выделить. Вся идея.
    В коде грешу на
    «ВзятьДанные = Cells(ActiveCell.Row, 2).Value»
    Он не берет значение -> не может найти его на другом листе. Как заставить его видеть значение. ( Кавычки ставил — не помогает.

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim ra As Range, finra As Range

    If Target.Cells.Value = «» Then Exit Sub
    If Not Intersect(Target, Range(«AF3:AF5000»)) Is Nothing Then

    ВзятьДанные = Cells(ActiveCell.Row, 2).Value
    Sheets(«Результат»).Select
    For Each cell In Range(«A3:A2000»).Cells
    If cell = ВзятьДанные Then
    If finra Is Nothing Then Set finra = cell Else Set finra = Union(finra, cell)
    End If
    Next

    If Not finra Is Nothing Then finra.EntireRow.Select
    Application.ScreenUpdating = True
    End If
    End Sub

    Андрей, так попробуйте

    Со скрытием строчек все отлично. но что делать, если в дальнейшем мне нужно некоторые скрытые строки вновь раскрыть (т.к. признак для скрытия для них может в будущем быть нерелевантен)?
    Сделал такую билеберду, но скрытые строки он не раскрывает 🙁 Видимо не видит скрытые строки. Помогите советом пожалуйста!

    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.Hidden = False
    End Sub

    Кирилл, так попробуйте:
    УдалятьСтрокиСТекстом = Worksheets(«ИмяВторогоЛиста»).range(«a2:a10»)
    или так
    УдалятьСтрокиСТекстом = Worksheets(2).range(«a2:a10»)

    Добрый день! Ваш макрос очень выручает, Подскажите, как сделать, чтобы слова для поиска брались не из строки = Array(«Наименование *», «Количество», «текст?», «цен*сти», «*78*»),а с другого листа

    Спасибо, заработало.
    Ну я и тупой.

    Sub погрузка()
    Dim ra As Range, delra As Range
    Application.ScreenUpdating = False ‘ отключаем обновление экрана

    ‘ ищем и удаляем строки, содержащие заданный текст
    ‘ (можно указать сколько угодно значений и использовать подстановочные знаки)
    УдалятьСтрокиСТекстом = Array(«ИД пункта:», «ИД маршрута:», _
    «Название модели:», «Склад отгрузки:»)

    ‘ перебираем все строки в используемом диапозоне листа
    For Each ra In ActiveSheet.UsedRange.Rows
    ‘ перебираем все фразы в массиве
    If ra.Row >= 17 Then
    For Each word In УдалятьСтрокиСТекстом
    Next word
    End If
    ‘ если в очередной строке листа найден искомый текст
    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

    ‘ если подходящие строки найдены, то (оставте одну из следующих строк)
    If Not delra Is Nothing Then delra.EntireRow.Hidden = True ‘ скрываем их
    If Not delra Is Nothing Then delra.EntireRow.Delete ‘ удаляем их
    End Sub

    Пожалуйста, подскажите что не так, в таком исполнении не хочет удалять с 17 строки.
    Gjlcrf;bnt xnj yt nfr

    If ra.row >= 17 then
    For Each word In УдалятьСтрокиСТекстом
    .
    Next word
    end if

    Похоже я не совсем правильно выразил свою мысль, в макросе УдалениеСтрокПоНесколькимУсловиям нужно удалять строки с определенным текстом только с 17 строки и до конца листа.

    Вместо
    If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
    пишете
    ra.Replace («Что заменить», «»)

    нет, мне в этом макросе нужно что бы текст удалялся с определенной сторки.

    Судя по описанию задачи, Вам нужна штатная функция Эксель — заменить. Ctrl+H. Найти — пишете нужный Вам текст, поле «Заменить на» оставляете пустым.

    а можете подсказать, как можно найти и удалить текст с определенной строки.

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

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

    Способ первый:
    Использовать встроенное средство 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(«Укажите значение, которое необходимо найти в строке», «Запрос параметра», «») If sSubStr = «» Then lMet = 0 Else lMet = 1 lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «Запрос параметра», 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(«Укажите значение, которое необходимо найти в строке», «Запрос параметра», «») lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «Запрос параметра», 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(«Укажите номер столбца, в котором искать указанное значение», «Запрос параметра», 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

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

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

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

    Чтобы быстро избавиться от ненужных данных, необходимо воспользоваться фильтром. В качестве примера рассмотрим отчет о выручке с проданных фруктов. Необходимо убрать позиции, где выручка меньше 100.

    1. Выделяете таблицу, на главной вкладке панели инструментов ищете кнопку Сортировка и фильтр и из выпадающего списка выбираете нужную опцию.

    1. Щелкаете по стрелочке в столбце Выручка, переходите к строке Числовые фильтры и выбираете нужное условие. В нашем случае меньше.

    1. В новом окне вводите число, меньше которого будет применяться фильтрация.

    1. Выделяете полученный фрагмент таблицы, нажимаете правой клавишей мыши и выбираете Удалить строку.

    1. Снова нажимаете стрелочку вниз и щелкаете по опции снять фильтр.

    1. Таблица принимает вид без удаленных строк.

    Чтобы автоматически убирать ненужные строки, можно воспользоваться специальным инструментом редактора – макросами. Эта функция требует знаний в области программирования и синтаксисе языка Visual Basic for Application (VBA), а также необходимо иметь идею для решения задачи по средствам подпрограммы. В интернете много готовых макросов, которые подходят для удаления строк в таблице. Достаточно их скачать и привязать к редактору.

    Важно! Скачивайте файлы только с проверенных сайтов во избежание заражения компьютера вирусами.

    Как видите, удалить строки по условию не трудно. Более продвинутые пользователи могут воспользоваться макросами, а для остальных отлично подойдет фильтрация данных по заданному критерию.

    Жми «Нравится» и получай только лучшие посты в Facebook ↓

    Содержание:

    1. Удаление текста после символа с помощью функции поиска и замены
    2. Удалить текст с помощью формул
    3. Удаление текста с помощью заливки Flash
    4. Удалить текст с помощью VBA (пользовательская функция)

    При работе с текстовыми данными в Excel вам может потребоваться удалить текст до или после определенного символа или текстовой строки.

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

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

    В этом уроке я покажу вам, как удалить текст до или после определенного символа в Excel (на разных примерах).

    Итак, давайте начнем с нескольких простых примеров.

    Удаление текста после символа с помощью функции поиска и замены

    Если вы хотите быстро удалить весь текст после определенной текстовой строки (или перед текстовой строкой), вы можете сделать это с помощью «Найти и заменить» и подстановочных знаков.

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

    Ниже приведены шаги для этого:

    1. Скопируйте и вставьте данные из столбца A в столбец B (это также необходимо для сохранения исходных данных)
    2. Выделив ячейки в столбце B, перейдите на вкладку «Главная».
    3. В группе «Редактирование» нажмите «Найти и выбрать».
    4. В параметрах, которые появляются в раскрывающемся списке, щелкните параметр «Заменить». Откроется диалоговое окно «Найти и заменить».
    5. В поле «Найти» введите ,* (т.е. запятая, за которой следует звездочка)
    6. Оставьте поле «Заменить на» пустым.
    7. Нажмите кнопку «Заменить все».

    Вышеупомянутые шаги позволят найти запятую в наборе данных и удалить весь текст после запятой (включая запятую).

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

    Как это работает?

    * (знак звездочки) — это подстановочный знак, который может представлять любое количество символов.

    Когда я использую его после запятой (в поле «Найти»), а затем нажимаю кнопку «Заменить все», он находит первую запятую в ячейке и считает ее совпадением.

    Это связано с тем, что знак звездочки (*) считается соответствием всей текстовой строке, следующей за запятой.

    Поэтому, когда вы нажимаете кнопку «Заменить все», она заменяет запятую и весь последующий текст.

    Примечание: Этот метод работает хорошо, тогда у вас есть только одна запятая в каждой ячейке (как в нашем примере). Если у вас несколько запятых, этот метод всегда найдет первую запятую, а затем удалит все после нее. Таким образом, вы не можете использовать этот метод, если хотите заменить весь текст после второй запятой и оставить первый как есть.

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

    Удалить текст с помощью формул

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

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

    Ниже приведена формула для этого:
    = ЛЕВЫЙ (A2; НАЙТИ (";"; A2) -1)

    В приведенной выше формуле используется функция НАЙТИ, чтобы найти положение запятой в ячейке.

    Этот номер позиции затем используется функцией LEFT для извлечения всех символов перед запятой. Поскольку мне не нужна запятая как часть результата, я вычел 1 из полученного значения формулы поиска.

    Это был простой сценарий.

    Возьмем немного сложный.

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

    Вот формула, которая сделает это:
    = ЛЕВЫЙ (A2; НАЙТИ ("!", ПОДСТАВИТЬ (A2, ",", "!", 2)) - 1)

    Поскольку в этом наборе данных есть несколько запятых, я не могу использовать функцию НАЙТИ, чтобы получить позицию первой запятой и извлечь все, что находится слева от нее.

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

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

    Эта позиция восклицательного знака используется в функции LEFT для извлечения всего, что находится до второй запятой.

    Все идет нормально!

    Но что, если в наборе данных есть непоследовательное количество запятых.

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

    В этом случае мне нужно как-то определить позицию последнего вхождения запятой, а затем извлечь все, что находится слева от нее.

    Ниже приведена формула, которая сделает это
    = ЛЕВЫЙ (A2; НАЙТИ ("!", ПОДСТАВИТЬ (A2, ",", "!", LEN (A2) -LEN (ПОДСТАВИТЬ (A2, ",", "")))) - 1)

    В приведенной выше формуле функция LEN используется для определения общей длины текста в ячейке, а также длины текста без запятой.

    Когда я вычитаю эти два значения, получается общее количество запятых в ячейке.

    Таким образом, это дало бы мне 3 для ячейки A2 и 2 для ячейки A4.

    Это значение затем используется в формуле ЗАМЕНА для замены последней запятой восклицательным знаком. И затем вы можете использовать левую функцию для извлечения всего, что находится слева от восклицательного знака (где раньше была последняя запятая)

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

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

    Удаление текста с помощью заливки Flash

    Flash Fill — это инструмент, который был представлен в Excel 2013 и доступен во всех последующих версиях.

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

    Поэтому, если вы хотите удалить текст до или после определенного символа, вам просто нужно показать flash fairy, как будет выглядеть результат (введя его вручную пару раз), и flash fill автоматически распознает узор и даст вам результаты, достижения.

    Позвольте показать вам это на примере.

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

    Вот шаги, чтобы сделать это с помощью Flash Fill:

    1. В ячейке B2, которая является соседним столбцом наших данных, вручную введите «Jeffery Haggins» (что является ожидаемым результатом).
    2. В ячейке B3 введите «Тим Скотт» (ожидаемый результат для второй ячейки).
    3. Выберите диапазон B2: B10
    4. Перейдите на вкладку «Главная»
    5. В группе «Редактирование» щелкните раскрывающийся список «Заливка».
    6. Нажмите на Flash Fill.

    Вышеупомянутые шаги дадут вам результат, как показано ниже:

    Вы также можете использовать сочетание клавиш Flash Fill. Ctrl + E после выбора ячеек в столбце результатов (столбец B в нашем примере)

    Flash Fill — замечательный инструмент, и в большинстве случаев он способен распознать узор и дать вам правильный результат. но в некоторых случаях он может не распознать шаблон правильно и может дать неверные результаты.

    Так что не забудьте еще раз проверить результаты Flash Fill.

    И точно так же, как мы удалили весь текст после определенного символа с помощью флэш-заливки, вы можете использовать те же шаги, чтобы удалить текст перед определенным символом. просто покажите вручную в соседнем столбце flash fill, как результат должен выглядеть как мой Интернет, а все остальное сделает он.

    Удалить текст с помощью VBA (пользовательская функция)

    Вся концепция удаления текста до или после определенного символа зависит от нахождения позиции этого символа.

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

    Если это то, что вам нужно делать довольно часто, вы можете упростить этот процесс, создав настраиваемую функцию с помощью VBA (называемую функциями, определяемыми пользователем).

    После создания вы можете повторно использовать эту функцию снова и снова. Это также намного проще и проще в использовании (поскольку большая часть тяжелой работы выполняется кодом VBA в серверной части).

    Ниже кода VBA, который можно использовать для создания настраиваемой функции в Excel:
    Функция LastPosition (rCell As Range, rChar As String) 'Эта функция выдает последнюю позицию указанного символа' Этот код был разработан Sumit Bansal (https://trumpexcel.com) Dim rLen As Integer rLen = Len (rCell) For i = rLen To 1 Step -1 If Mid (rCell, i - 1, 1) = rChar Then LastPosition = i - 1 Выход из функции End If Next i End Function
    Вам необходимо поместить код VBA в обычный модуль редактора VB или в личную книгу макросов. Когда он у вас есть, вы можете использовать его как любую другую обычную функцию рабочего листа в книге.

    Эта функция принимает 2 аргумента:

    1. Ссылка на ячейку, для которой вы хотите найти последнее вхождение определенного символа или текстовой строки.
    2. Символьная или текстовая строка, позицию которой вам нужно найти

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

    Ниже приведена формула, которая сделает это:
    = ЛЕВЫЙ (A2; LastPosition (A2; ",") - 1)

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

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

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

    Вот некоторые из писем, которые вы можете использовать для быстрого удаления текста до или после определенного символа в Excel.

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

    Надеюсь, вы нашли этот урок полезным.

    In this guide, we’re going to show you how to remove all rows containing specific value in Excel. We are going to be taking a look at two methods:

    • Find and Replace
    • Filter

    These methods are good for removing all rows containing a specific value, such as repeating headers.

    Removing all rows containing specific value using Find and Replace

    1. If you wish to perform removing a specific range, select your data, including the values you want to remove. Otherwise, you do not need to select any cells.
    2. Press the Ctrl + F key combination to open Find and Replace.
    3. Type in the value in the rows you want to remove.
    4. Click Find All.
    5. Select any of the found values in the results pane.
    6. Press Ctrl + A to select all of them. You can select specific values you want to remove by using Ctrl or Shift keys.
    7. Close the Find and Replace window.
      How to remove all rows containing specific value in Excel - Find Replace
    8. Press Ctrl + — to open Delete
    9. Select Entire row
    10. Click OK button to delete those rows.

    After clicking OK, Excel will remove all rows containing the selected cells.

    Warning: If found and selected items contain an Excel Table header, the Ctrl + — shortcut will not work.

    Removing all rows containing specific value using Filter

    This approach is more suitable for data in a table structure.

    1. Select your data, including the values you want to remove.
    2. Press Ctrl + Shift + L to enable Filters. Alternatively, you can click Filter in Data tab.
    3. Click the down arrow in the header of the column that contains the value you want to select.
    4. Select the value(s) you want to remove in the filter dialog.
    5. Click OK to apply the filter.
      How to remove all rows containing specific value in Excel - Filter
    6. Select each cell individually by clicking cells while holding down the Ctrl key. Don’t use the Shift key or drag the mouse to select cells.
    7. Once the cells are selected, press Ctrl + —.
    8. Click OK on prompt dialog to delete rows.

    Clear the filters to see the remaining rows.

    Понравилась статья? Поделить с друзьями:
  • Удалить текст между символами excel
  • Удалить текст в ячейке excel после символами
  • Удалить текст в ячейках excel vba
  • Удалить текст в рисунке word
  • Удалить текст в word от закладки до закладки