Удаление текста до, после или между двумя символами в Excel

  • Поделись Этим
Michael Brown

В нескольких последних статьях мы рассмотрели различные способы удаления символов из строк в Excel. Сегодня мы рассмотрим еще один вариант использования - как удалить все до или после определенного символа.

    Удалите текст до, после или между двумя символами с помощью Find & Replace

    Для работы с данными в нескольких ячейках подходит инструмент Найти и заменить. Чтобы удалить часть строки, предшествующую или следующую за определенным символом, необходимо выполнить следующие действия:

    1. Выделите все ячейки, в которых нужно удалить текст.
    2. Нажмите Ctrl + H, чтобы открыть Найти и заменить диалог.
    3. В Найдите то, что введите одну из следующих комбинаций:
      • Чтобы убрать текст перед данным символом введите символ, которому предшествует звездочка (*char).
      • Чтобы удалить текст после определенного персонажа введите символ, за которым следует звездочка (char*).
      • Чтобы удалить подстроку между двумя персонажами введите звездочку, окруженную двумя символами (char*char).
    4. Оставьте Заменить с ящик пуст.
    5. Нажмите Заменить все .

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

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

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

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

    Совет. Если вы хотите, чтобы имена и номера телефонов были разделены запятой, введите запятую (,) в поле Заменить на поле.

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

    В современных версиях Excel (2013 и более поздних) есть еще один простой способ удалить текст, который предшествует или следует за определенным символом - функция Flash Fill. Вот как она работает:

    1. В ячейке рядом с первой ячейкой с вашими данными введите ожидаемый результат и нажмите Enter .
    2. Начните вводить соответствующее значение в следующую ячейку. Как только Excel почувствует закономерность вводимых значений, он отобразит предварительный просмотр остальных ячеек, следующих той же закономерности.
    3. Нажмите клавишу Enter, чтобы принять предложение.

    Готово!

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

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

    Как удалить все после определенного символа

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

    ЛЕВЫЙ( ячейка , ПОИСК(" char ", ячейка ) -1)

    Здесь мы используем функцию SEARCH для получения позиции символа и передаем ее функции LEFT, чтобы она извлекла соответствующее количество символов из начала строки. Один символ вычитается из числа, возвращенного SEARCH, чтобы исключить разделитель из результатов.

    Например, чтобы удалить часть строки после запятой, введите приведенную ниже формулу в B2 и перетащите ее вниз через B7:

    =LEFT(A2, SEARCH(",", A2) -1)

    Как удалить все перед определенным символом

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

    ПРАВДА( ячейка , LEN( ячейка ) - ПОИСК(" char ", ячейка ))

    Здесь мы снова вычисляем позицию целевого символа с помощью SEARCH, вычитаем ее из общей длины строки, возвращаемой LEN, и передаем разницу в функцию RIGHT, чтобы она вытащила столько символов из конца строки.

    Например, чтобы удалить текст перед запятой, используется следующая формула:

    =RIGHT(A2, LEN(A2) - SEARCH(",", A2))

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

    =TRIM(RIGHT(A2, LEN(A2) - SEARCH(",", A2)))

    Примечания:

    • Оба приведенных выше примера предполагают, что существует только один случай разделителя в исходной строке. Если их несколько, то текст будет удален до/после первый случай .
    • Функция ПОИСК - это не чувствительный к регистру означает, что он не делает различий между строчными и прописными символами. Если ваш конкретный символ - буква, и вы хотите различать регистр буквы, то используйте с учетом регистра Функция FIND вместо SEARCH.

    Как удалить текст после N-го появления символа

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

    ЛЕВЫЙ( ячейка , FIND("#", SUBSTITUTE( ячейка , " char ", "#", n )) -1)

    Где n это вхождение символа, после которого следует удалить текст.

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

    Например, чтобы удалить все после 2-й запятой в A2 (и саму запятую), формула выглядит следующим образом:

    =LEFT(A2, FIND("#", SUBSTITUTE(A2, ",", "#", 2)) -1)

    Как работает эта формула:

    Ключевой частью формулы является функция FIND, которая вычисляет позицию n-го разделителя (в нашем случае запятой). Вот как это делается:

    Мы заменим 2-ю запятую в A2 на хэш-символ (или любой другой символ, которого нет в ваших данных) с помощью SUBSTITUTE:

    SUBSTITUTE(A2, ",", "#", 2)

    Полученная строка идет во 2-й аргумент FIND, поэтому он находит позицию "#" в этой строке:

    FIND("#", "Эмма, дизайн# (102) 123-4568")

    FIND сообщает нам, что "#" - это 13-й символ в строке. Чтобы узнать количество символов, предшествующих ему, просто вычтите 1, и в результате вы получите 12:

    FIND("#", SUBSTITUTE(A2, ",", "#", 2)) - 1

    Этот номер поступает непосредственно в num_chars аргумент LEFT, прося его извлечь первые 12 символов из A2:

    =LEFT(A2, 12)

    Вот и все!

    Как удалить текст до N-го появления символа

    Общей формулой для удаления подстроки до определенного символа является:

    ПРАВО(ЗАМЕНА( ячейка , " char ", "#", n ), LEN( ячейка ) - FIND("#", SUBSTITUTE( ячейка , " char ", "#", n )) -1)

    Например, чтобы убрать текст перед второй запятой в A2, формула выглядит следующим образом:

    =RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2)) -1)

    Чтобы удалить ведущий пробел, мы снова используем функцию TRIM в качестве обертки:

    =TRIM(RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))))

    Как работает эта формула:

    В общем, мы выясняем, сколько символов находится после n-го разделителя, и извлекаем подстроку соответствующей длины справа. Ниже приведена разбивка формулы:

    Во-первых, мы заменим вторую запятую в A2 символом хэша:

    SUBSTITUTE(A2, ",", "#", 2)

    Полученная строка отправляется в текст аргумент ПРАВДЫ:

    RIGHT("Emma, Design# (102) 123-4568", ...

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

    FIND("#", SUBSTITUTE(A2, ",", "#", 2))

    И вычесть ее из общей длины строки (которая равна 28):

    LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))

    Разница (15) передается во второй аргумент RIGHT, указывая ему извлечь последние 15 символов из строки в первом аргументе:

    RIGHT("Emma, Design# (102) 123-4568", 15)

    На выходе получается подстрока " (102) 123-4568", которая очень близка к желаемому результату, за исключением ведущего пробела. Поэтому мы используем функцию TRIM, чтобы избавиться от него.

    Как удалить текст после последнего вхождения символа

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

    ЛЕВЫЙ( ячейка , FIND("#", SUBSTITUTE( ячейка , " char ", "#", LEN( ячейка ) - LEN(SUBSTITUTE( ячейка , " char ", "")))) -1)

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

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

    =LEFT(A2, FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))) -1)

    Скопируйте формулу вниз по столбцу, и вы получите такой результат:

    Как работает эта формула:

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

    Сначала мы выясним, сколько запятых в исходной строке. Для этого мы заменим каждую запятую на ничто ("") и подадим полученную строку функции LEN:

    LEN(SUBSTITUTE(A2, ",",""))

    Для A2 результат равен 35 - это количество символов в A2 без запятых.

    Вычтите указанное выше число из общей длины строки (38 символов):

    LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))

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

    Далее вы используете уже знакомую комбинацию функций FIND и SUBSTITUTE для получения позиции последней запятой в строке. Номер экземпляра (3-я запятая в нашем случае) задается вышеупомянутой формулой LEN SUBSTITUTE:

    FIND("#", SUBSTITUTE(A2, ",", "#", 3))

    Получается, что 3-я запятая является 23-м символом в A2, значит, нам нужно извлечь 22 символа, предшествующих ей. Итак, подставляем вышеприведенную формулу минус 1 в num_chars аргумент ЛЕВША:

    ЛЕВЫЙ(A2, 23-1)

    Как удалить текст перед последним вхождением символа

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

    ПРАВДА( ячейка , LEN( ячейка ) - FIND("#", SUBSTITUTE( ячейка , " char ", "#", LEN( ячейка ) - LEN(SUBSTITUTE( ячейка , " char ", "")))))

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

    =RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",", ")))))

    В качестве завершающего штриха мы вложим его в функцию TRIM для устранения пробелов:

    =TRIM(RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",", "))))))

    Как работает эта формула:

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

    LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",", "))))

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

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

    Как вы видели в приведенных выше примерах, вы можете решить практически любую проблему, используя встроенные функции Excel в различных комбинациях. Проблема в том, что вам нужно запомнить несколько хитрых формул. Хм, а что если мы напишем собственную функцию, которая охватит все сценарии? Звучит как хорошая идея. Итак, добавьте следующий код VBA в вашу рабочую книгу (подробные шаги по вставке VBA в Excel следующиездесь):

    Function RemoveText(str As String , delimiter As String , occurrence As Integer , is_after As Boolean ) Dim delimiter_num, start_num, delimiter_len As Integer Dim str_result As String delimiter_num = 0 start_num = 1 str_result = "" delimiter_len = Len(delimiter) For i = 1 To occurrence delimiter_num = InStr(start_num, str, delimiter, vbTextCompare) If 0 <delimiter_num Then start_num =delimiter_num + delimiter_len End If Next i If 0 <delimiter_num Then If True = is_after Then str_result = Mid(str, 1, start_num - delimiter_len - 1) Else str_result = Mid(str, start_num) End If End If RemoveText = str_result End Function

    Наша функция называется RemoveText и имеет следующий синтаксис:

    RemoveText(string, delimiter, occurrence, is_after)

    Где:

    Строка - исходная текстовая строка. Может быть представлена ссылкой на ячейку.

    Разделитель - символ, до/после которого нужно удалить текст.

    Происшествие - экземпляр разделителя.

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

    • TRUE - удалить все после разделителя (включая сам разделитель).
    • FALSE - удалить все перед разделителем (включая сам разделитель).

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

    Например, чтобы стереть все после первой запятой в A2, формула в B2 имеет вид:

    =RemoveText(A3, ", ", 1, TRUE)

    Чтобы удалить все, что находится перед первой запятой в A2, формула в C2 имеет вид:

    =RemoveText(A3, ", ", 1, FALSE)

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

    Наша пользовательская функция работает прекрасно, не так ли? Но если вы думаете, что это исчерпывающее решение, вы еще не видели следующего примера :)

    Удалите все до, после или между символами

    Чтобы получить еще больше возможностей для удаления отдельных символов или текста из нескольких ячеек, по совпадению или позиции, добавьте наш Ultimate Suite в свой набор инструментов Excel.

    Здесь мы более подробно рассмотрим Удалить по должности функция, расположенная на Ablebits Data вкладка> Текст группа> Удалить .

    Ниже мы рассмотрим два наиболее распространенных сценария.

    Удалите все, что находится до или после определенного текста

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

    1. Выберите Все символы перед текстом или Все символы после текста и введите текст ключа (или символ) в поле рядом с ним.
    2. В зависимости от того, должны ли прописные и строчные буквы рассматриваться как разные или одинаковые символы, установите или снимите флажок в поле С учетом регистра коробка.
    3. Хит Удалить .

    В этом примере мы удаляем все символы, предшествующие слову "ошибка" в ячейках A2:A8:

    И получить именно тот результат, который мы ищем:

    Удаление текста между двумя символами

    В ситуации, когда неактуальная информация находится между двумя определенными символами, вот как ее можно быстро удалить:

    1. Выберите Удалите все подстроки и введите два символа в указанные ниже поля.
    2. Если символы "между" также должны быть удалены, проверьте параметр Включая разделители коробка.
    3. Нажмите Удалить .

    В качестве примера мы удалим все, что находится между двумя символами тильды (~), и получим в результате идеально очищенные строки:

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

    Доступные загрузки

    Удаление первых или последних символов - примеры (файл.xlsm)

    Ultimate Suite - пробная версия (файл .exe)

    Майкл Браун — увлеченный технологический энтузиаст, стремящийся упростить сложные процессы с помощью программных инструментов. Имея более чем десятилетний опыт работы в технологической отрасли, он отточил свои навыки в Microsoft Excel и Outlook, а также в Google Sheets и Docs. Блог Майкла посвящен тому, чтобы делиться своими знаниями и опытом с другими, предоставляя простые советы и учебные пособия для повышения производительности и эффективности. Являетесь ли вы опытным профессионалом или новичком, в блоге Майкла вы найдете ценную информацию и практические советы, которые помогут вам максимально эффективно использовать эти важные программные инструменты.