Видалення пробілів і порожніх рядків в Excel за допомогою Regex

  • Поділитися Цим
Michael Brown

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

Які б вхідні дані ви не використовували, ви навряд чи зустрінете набір даних без пробілів. У більшості випадків пробіли - це добре: ви використовуєте їх для візуального розділення різних частин інформації, щоб полегшити її сприйняття. Однак у деяких ситуаціях вони можуть стати злом - зайві пробіли можуть зіпсувати ваші формули і зробити робочі аркуші майже некерованими.

    Перш ніж зануритися в тонкощі використання регулярних виразів для видалення пробілів на аркушах 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])

    Перші три аргументи є обов'язковими, останні два - необов'язковими.

    Де:

    • Текст - вихідний рядок для пошуку.
    • Візерунок - регекс для пошуку.
    • Заміна - текст замінити на наступний видалити пробіли ви б поставили цей аргумент на будь-яке з двох значень:
      • порожній рядок ("") обрізати абсолютно всі пробіли
      • простір характер (" ") для заміни декількох пробілів одним символом пробілу
    • Номер примірника (необов'язково) - номер екземпляра. У більшості випадків його слід опустити, щоб замінити всі екземпляри (за замовчуванням).
    • Match_case (необов'язково) - булеве значення, що вказує на відповідність (TRUE) або ігнорування (FALSE) регістру тексту. Для пробілів не має значення і тому опускається.

    Для отримання додаткової інформації, будь ласка, зверніться до функції RegExpReplace.

    Як видалити пробіли за допомогою regex - приклади

    За допомогою функції RegExpReplace, доданої до вашої робочої книги, давайте розглянемо різні сценарії по черзі.

    Видалити всі пробіли за допомогою regex

    Щоб видалити всі пробіли в рядку, просто знайдіть будь-який пробіл, включаючи пробіл, табуляцію, повернення каретки і переведення рядка, і замініть його на порожній рядок ("").

    Візерунок : \s+

    Заміна : ""

    Якщо припустити, що вихідний рядок знаходиться в комірці A5, то формула в комірці B5 буде такою:

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

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

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

    Видаліть більше одного пробілу

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

    Візерунок : \s+

    Заміна : " "

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

    Зверніть увагу, що ця формула зберігає по одному пробілу не тільки між словами, але і на початку і в кінці рядка, що не дуже добре. Щоб позбутися від початкових і кінцевих пробілів, вкладіть наведену вище формулу в іншу функцію RegExpReplace, яка видаляє пробіли з початку і кінця рядка:

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

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

    Для пошуку пробілів на початку або в кінці рядка використовуються якорі початок ^ і кінець $.

    Провідні пробіли:

    Візерунок : ^[\s]+

    Причіпний пробіли:

    Візерунок : [\s]+$

    Провідні і причіпний пробіли:

    Візерунок : ^[\s]+

    Який би регекс ви не вибрали, замінюйте збіги нічим.

    Заміна : ""

    Наприклад, для усунення всіх пропусків на початку і в кінці рядка в форматі А5 використовується формула:

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

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

    Видаліть зайві пробіли, але збережіть переноси рядків

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

    У наведеному нижче наборі даних припустимо, що ви хочете обрізати всі початкові/кінцеві пробіли та всі, крім одного, пробіли між рядками, залишивши кілька рядків недоторканими. Для виконання завдання вам знадобляться дві різні функції RegExpReplace.

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

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

    Другий - забирає пробіли з початку та кінця рядка:

    =RegExpReplace(A5, "^ +

    Просто вкладіть ці дві функції одна в іншу:

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

    І ви отримаєте ідеальний результат:

    Регекс для заміни декількох пробілів одним символом

    Якщо ви хочете видалити всі пробіли з рядка і замінити кожну групу пробілів, що йдуть підряд, на певний символ, то це те, що вам потрібно зробити:

    По-перше, використовуйте цей регекс для обрізання початкових і кінцевих пробілів:

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

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

    Візерунок : \s+

    Заміна : -

    Якщо припустити, що вихідний рядок знаходиться в комірці A8, то формула набуває такого вигляду:

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

    Або ви можете ввести шаблони та заміни в окремі комірки, як показано на скріншоті:

    Регекс для видалення порожніх рядків

    Ось питання, яке часто задають користувачі, які мають кілька рядків в одній комірці: "У моїх комірках багато порожніх рядків. Чи можна якось позбутися від них, окрім як пройтись по кожній комірці і видалити кожен рядок вручну?" Відповідь: Це легко!

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

    Візерунок : ^\n

    Якщо ваші візуально порожні рядки містять пробіли або табуляції, використовуйте цей регулярний вираз:

    Візерунок ^[\t ]*\n

    Просто замініть регекс на порожній рядок за цією формулою, і всі порожні рядки відразу зникнуть!

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

    Видалення пробілів за допомогою RegEx Tools

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

    На щастя, інструменти RegEx, що входять до складу нашого Ultimate Suite, позбавлені цих обмежень, оскільки вони обробляються механізмом .NET RegEx від Microsoft. Це дозволяє створювати більш складні шаблони, які не підтримуються VBA RegExp. Нижче наведено приклад такого регулярного виразу.

    Регекс для видалення пробілів між числами

    Припустимо, що в алфавітно-цифровому рядку потрібно видалити тільки пробіли між цифрами, тому рядок, наприклад, "A 1 2 B" стане "A 12 B".

    Для того, щоб підібрати пробіл між будь-якими двома цифрами, можна скористатися наступними підказками:

    Візерунок : (?<=\d)\s+(?=\d)

    Щоб створити формулу на основі наведених вище регексів, необхідно виконати два простих кроки:

    1. Про це йдеться на Дані про абіти у вкладці Текст групу, натисніть Regex Tools .

    2. Про це йдеться на Regex Tools виберіть вихідні дані, введіть свій регекс, натисніть кнопку Видалити і натиснути на кнопку Видалити .

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

    За мить ви побачите AblebitsRegexRemove функція вставляється в новий стовпчик праворуч від вихідних даних.

    Крім того, ви можете ввести регекс в якусь комірку, скажімо A5, і вставити формулу безпосередньо в комірку за допомогою кнопки Функція вставки діалогове вікно, в якому AblebitsRegexRemove знаходиться в рубриці AblebitsUDF .

    Оскільки ця функція спеціально розроблена для видалення рядків, їй потрібно всього два аргументи - вхідний рядок і регекс:

    =AblebitsRegexRemove(A5, $A$2)

    Ось так можна видалити пробіли в Excel за допомогою регулярних виразів. Дякую за прочитання і з нетерпінням чекаю зустрічі з вами на нашому блозі наступного тижня!

    Доступні для завантаження

    Видалення пробілів за допомогою regex - приклади (файл .xlsm)

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

    Майкл Браун — відданий ентузіаст технологій із пристрастю до спрощення складних процесів за допомогою програмних засобів. Маючи понад десятирічний досвід роботи в технологічній індустрії, він відточив свої навички роботи з Microsoft Excel і Outlook, а також із Google Таблицями та Документами. Блог Майкла присвячений тому, щоб поділитися своїми знаннями та досвідом з іншими, надаючи прості поради та навчальні посібники для підвищення продуктивності та ефективності. Незалежно від того, чи є ви досвідченим професіоналом чи початківцем, блог Майкла пропонує цінну інформацію та практичні поради щодо отримання максимальної користі від цих основних програмних інструментів.