Возможности !SEMTools

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

Заменой остальных символов

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

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

Извлечение цифр из ячейки формулой

Такая формула массива будет работать только в сборках Excel, в которых поддерживается функция СЦЕП (аналог JOIN в Google Spreadsheets) – это некоторые сборки Excel 2016, 2019, и все релизы Excel 2021. Отличие СЦЕП от СЦЕПИТЬ в том, что она может принимать на вход диапазоны и массивы и возвращать при этом единое значение.

Так будет выглядеть формула, извлекающая только цифры из ячейки A1:

=СЦЕП(ЕСЛИОШИБКА(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)+0;""))

Механика её работы:

  1. Сначала измеряется длина текстового значения ячейки функцией ДЛСТР
  2. Далее создается текстовое выражение диапазона строк с помощью конкатенации амперсандом (&)
  3. Это текстовое выражение преобразуется в реальный диапазон функцией ДВССЫЛ
  4. Функция СТРОКА возвращает массив чисел от 1 до числа, соответствующего концу этого диапазона
  5. Функция ПСТР извлекает по этому массиву чисел соответствующие символы по порядку
  6. К каждому символу прибавляется 0 – это позволяет отличить цифры от остальных символов, т.к. цифры не вернут ошибку, а все остальные вернут
  7. Функция ЕСЛИОШИБКА заменяет все ошибки на пустые строки
  8. В финале функция СЦЕП объединяет массив в единую строку

С помощью пользовательских функций (UDF)

Пример пользовательской функции, которая поможет с извлечением чисел из текста:

Function extrNum(x As String) As Long   
   For n = 1 To Len(x)   
       If Mid(x, n, 1) Like "#" Then extrNum = extrNum & Mid(x, n, 1)   
   Next n   
End Function

Как применить данный код:

  1. внедрить его в новый модуль книги (используемой сейчас или в личной книге макросов),
  2. применить функцию на листе в подобном виде: =extrNum(A1).

С помощью синтаксиса регулярных выражений

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

Как в платной, так и в бесплатной версии !SEMTools есть функции:

  • regexReplace, берущая на вход 3 аргумента — строку с данными, текст регулярного выражения и строку для замены;
  • regexExtract с двумя аргументами — строкой и паттерном для извлечения.

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

=REGEXREPLACE(A1;"[^\d]";"")

Выражение для извлечения первой сплошной последовательности цифр:

=REGEXEXTRACT(A1;"\d+")

Что потребуется:

  1. установить !SEMTools,
  2. применить функции.

Извлечь цифры из текста в 1 клик

Пользователям платной версии !SEMTools доступна возможность извлекать цифры моментально прямо “на месте”, не прописывая никаких функций.

Макрос находится в группе «ИЗВЛЕЧЬ» в меню “Извлечь символы”.


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

Если необходимости в этом нет, можно постфактум просто заменить пробел на «пустоту».

Видеоинструкция

Удалить текст, а цифры оставить — именно такова механика алгоритма !SEMTools. Смотрите короткий видеопример:

Извлечение цифр из ячеек со смешанным содержимым в !SEMTools

Нужно извлечь числа из текста в Excel?
В !SEMTools есть это и сотни других готовых решений!!

4 комментария:

Возможно при помощи надстройки вытащить все числа с плавающей запятой из текста?

Если вы про UDF:
Если число начинается с 0, числовой результат будет без 0, так как числа с нулей не начинаются в принципе.
Если число начинается с 7, все работает корректно.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*