Удаление пробелов и пустых строк в Excel с помощью Regex

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

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

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

    Зачем использовать регулярное выражение для обрезки пробелов в Excel?

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

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

    • Встроенная функция TRIM может отделить только знак пробела который имеет значение 32 в 7-битной системе ASCII.
    • Регулярные выражения могут определять несколько различных форм пробельных символов, таких как пробел ( ), табуляция (\t), возврат каретки (\r) и новая строка (\n). Кроме того, существует символ пробельный символ (\s), который соответствует всем этим типам и чрезвычайно полезен для очистки исходных данных.

    Зная, что именно происходит за кулисами, гораздо легче найти решение, верно?

    Как включить регулярные выражения в Excel

    Как известно, Excel не поддерживает регулярные выражения. Чтобы включить их, необходимо создать пользовательскую функцию VBA. К счастью, у нас уже есть такая функция под названием RegExpReplace Подождите, почему "заменить", если мы говорим об удалении? В языке Excel "удалить" - это просто другое слово для "заменить пустой строкой" :)

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

    Вот синтаксис функции для справки:

    RegExpReplace(text, pattern, replacement, [instance_num], [match_case])

    Первые три аргумента являются обязательными, последние два - необязательными.

    Где:

    • Текст - исходная строка для поиска.
    • Узор - regex для поиска.
    • Замена - текст, на который нужно заменить. To удалить пробелы вы установите этот аргумент в любое значение:
      • пустая строка ("") для обрезки абсолютно всех пробелов
      • пространство персонаж (" ") для замены нескольких пробелов одним символом пробела
    • Номер_экземпляра (необязательно) - номер экземпляра. В большинстве случаев его можно опустить, чтобы заменить все экземпляры (по умолчанию).
    • Соответствие_случаю (необязательный) - булево значение, указывающее, следует ли согласовывать (TRUE) или игнорировать (FALSE) регистр текста. Для пробельных символов это значение не имеет значения и поэтому опускается.

    Для получения дополнительной информации см. функцию RegExpReplace.

    Как удалить пробелы с помощью regex - примеры

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

    Удаление всех пробельных символов с помощью regex

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

    Узор : \s+

    Замена : ""

    Если предположить, что исходная строка находится в A5, то формула в B5 будет следующей:

    =RegExpReplace(A5, "\s+", "")

    Чтобы упростить управление шаблонами, вы можете ввести regex в предопределенную ячейку и ввести его в формулу, используя абсолютную ссылку, например $A$2, так что адрес ячейки останется неизменным при копировании формулы вниз по столбцу.

    =RegExpReplace(A5, $A$2, "")

    Удалите более одного пробела

    Для удаления лишние пробелы (т.е. более одного пробела подряд), используйте тот же регекс \s+, но замените найденные совпадения одним символом пробела.

    Узор : \s+

    Замена : " "

    =RegExpReplace(A5, "\s+", " ")

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

    =RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+

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

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

    Ведущий пробелы:

    Узор : ^[\s]+

    Трейлинг пробелы:

    Узор : [\s]+$

    Ведущий и трейлинг пробелы:

    Узор : ^[\s]+

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

    Замена : ""

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

    =RegExpReplace(A5, "^[\s]+

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

    Удалите лишние пробельные символы, но сохраните переносы строк

    При работе с многострочными строками вы можете захотеть избавиться от лишних пробелов, но сохранить перевод строки. Для этого вместо символа пробела \s ищите пробелы [ ] или пробелы и табуляцию [\t ]. Последний шаблон удобен, когда исходные данные импортируются из другого источника, например, из текстового редактора.

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

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

    =RegExpReplace(A5, " +", " ")

    Другой удаляет пробелы из начала и конца строки:

    =RegExpReplace(A5, "^ +

    Просто вложите две функции одну в другую:

    =RegExpReplace(RegExpReplace(A5, " +", " "), "^ +

    И вы получите превосходный результат:

    Regex для замены нескольких пробелов одним символом

    Если вы хотите удалить все пробелы из строки и заменить каждую группу последовательных пробелов определенным символом, вам нужно сделать вот что:

    Во-первых, используйте этот regex для обрезания ведущих и последующих пробелов:

    =RegExpReplace(A8, "^[\s]+

    Затем выполните вышеуказанную функцию для текст аргумент другого RegExpReplace, который заменяет один или несколько последовательных пробелов на указанный вами символ, например, дефис:

    Узор : \s+

    Замена : -

    Если предположить, что исходная строка находится в A8, формула примет следующий вид:

    =RegExpReplace(RegExpReplace(A8, "^[\s]+

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

    Regex для удаления пустых строк

    Вот вопрос, который часто задают пользователи, имеющие несколько строк в одной ячейке: "В моих ячейках много пустых строк. Есть ли способ избавиться от них, кроме как пройтись по каждой ячейке и удалить каждую строку вручную?" Ответ: Это просто!

    Для соответствия пустых строк, в которых нет ни одного символа от начала ^ текущей строки до следующей строки \n, используется следующий регекс:

    Узор : ^\n

    Если визуально пустые строки содержат пробелы или табуляцию, используйте это регулярное выражение:

    Узор : ^[\t ]*\n

    Просто замените regex на пустую строку с помощью этой формулы, и все пустые строки сразу исчезнут!

    =RegExpReplace(A5, $A$2, "")

    Удаление пробельных символов с помощью инструментов RegEx

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

    К счастью, инструменты RegEx, включенные в наш Ultimate Suite, свободны от этих ограничений, поскольку они обрабатываются механизмом Microsoft .NET RegEx. Это позволяет вам создавать более сложные шаблоны, которые не поддерживаются VBA RegExp. Ниже вы найдете пример такого регулярного выражения.

    Regex для удаления пробела между числами

    В буквенно-цифровой строке, предположим, вы хотите удалить пробелы только между цифрами, поэтому строка типа "A 1 2 B" становится "A 12 B".

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

    Узор : (?<=\d)\s+(?=\d)

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

    1. На Ablebits Data во вкладке Текст группу, нажмите Инструменты регекса .

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

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

    Через мгновение вы увидите AblebitsRegexRemove функция вставляется в новый столбец справа от исходных данных.

    В качестве альтернативы вы можете ввести регекс в некоторую ячейку, например A5, и вставить формулу непосредственно в ячейку с помощью функции Функция вставки диалоговое окно, в котором AblebitsRegexRemove относится к категории AblebitsUDFs .

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

    =AblebitsRegexRemove(A5, $A$2)

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

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

    Удаление пробелов с помощью regex - примеры (файл.xlsm)

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

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