Хитрости »
1 Май 2011 398263 просмотров
Как оставить в ячейке только цифры или только текст?
Вот бывает так: есть у Вас в ячейке некий текст. Допустим «Было доставлено кусков мыла 763шт.». Вам нужно из этого только 763 — чтобы можно было провести с этим некие математические действия. Если это только одна ячейка — проблем тут нет, а если таких ячеек пару тысяч? И к тому же все разные?
- Было доставлено кусков мыла 763шт.
- Всего пришло 34
- Тюбики — 54 доставлено
- и т.д.
Никакой зацепки для извлечения данных. Пару тысяч таких строк удалять вручную весьма утомительное занятие, надо сказать. Да еще и не быстрое.
Есть несколько вариантов решения подобной задачи.
СПОСОБ 1: не используем макросы
можно применить формулу массива, вроде такой:
=ПСТР(A1;МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР(A1;СТРОКА($1:$99);1));СТРОКА($1:$99)));ПРОСМОТР(2;1/ЕЧИСЛО(-ПСТР(A1;СТРОКА($1:$99);1));СТРОКА($1:$99))-МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР(A1;СТРОКА($1:$99);1));СТРОКА($1:$99)))+1)
Три важных момента:
- Формула вводится в ячейку сочетанием клавиш Ctrl+Shift+Enter, т.к. является формулой массива. Подробнее про эти формулы читайте в статье: Что такое формула массива
- в таком виде формула работает с текстом, количество символов в котором не превышает 99. Чтобы расширить необходимо в формуле во всех местах заменить СТРОКА($1:$99) на СТРОКА($1:$200). Т.е. вместо 99 указать количество символов с запасом. Только не увлекайтесь, иначе может получиться, что формула будет работать слишком долго
- формула не обработает корректно текст «Было доставлено кусков мыла 763шт., а заказывали 780» и ему подобный, где числа раскиданы по тексту.
Теперь коротко разберем формулу на примере фразы: Было доставлено кусков мыла 763шт.
- в A1 сам текст, из которого необходимо извлечь числа: Было доставлено кусков мыла 763шт., а заказывали 780
- блок: МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР(A1;СТРОКА($1:$99);1));СТРОКА($1:$99)))
вычисляет позицию первой цифры в ячейке — 29 - блок: ПРОСМОТР(2;1/ЕЧИСЛО(-ПСТР(A1;СТРОКА($1:$99);1));СТРОКА($1:$99))
вычисляет позицию последней цифры в ячейке — 31 - в результате получается: =ПСТР(A1;29;31—29+1)
функция ПСТР извлекает из текста, указанного первым аргументом(A1) текст, начиная с указанной позиции(29) с количеством символов, указанным третьим аргументом(31—29+1) - И в итоге:
=ПСТР(A1;29;31—29+1)
=> =ПСТР(A1;29;2+1)
=> =ПСТР(A1;29;3)
=> 763
Может быть задача проще — необходимо извлечь односоставной текст, убрав цифры вначале и в конце строки, учитывая, что сам текст всегда следует после разделителя(например, тире):
12.08-АГСВ2
12.08-АГСВ1
01.03-ОВ2
12.03-КЖ6.1
Из этих данных надо получить только текст после тире(-) и отсечь цифры на конце:
АГСВ
АГСВ
ОВ
КЖ
Формула будет работать почти по тому же принципу, что и формула выше, но она проще:
=ПСТР(A1;ПОИСК(«-«;A1)+1;ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(—ПСТР(ПСТР(A1;ПОИСК(«-«;A1)+1;999);СТРОКА($1:$99);1));0)-1)
В данном случае мы при помощи
ПОИСК(«-«;A1)
ищем сначала позицию тире, далее при помощи
ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(—ПСТР(ПСТР(A1;ПОИСК(«-«;A1)+1;999);СТРОКА($1:$99);1));0)
находим именно в отсеченном тексте позицию первой цифры. Передаем эти значения в
ПСТР
, которая отбирает из этого текста все от первого тире(+1) до первого числа, идущего после текста.
СПОСОБ 2: используем макросы
Самый главный недостаток метода при помощи формулы, приведенной выше — из текста «Было доставлено кусков мыла 763шт., а заказывали 780» формула вернет не только числа, а и текст между первой и последней цифрой: 763шт., а заказывали 780.
Решить же проблему извлечения цифр даже из такого текста при помощи VBA куда проще и гибче. Плюс можно не только цифры извлекать, но и наоборот — цифры удалить, а извлечь только текст. Ниже приведен код пользовательской функции, которая поможет извлечь из строки только числа либо только текст. Иными словами, результатом функции будет либо только текст, либо только числа.
Function Extract_Number_from_Text(sWord As String, Optional Metod As Integer) 'sWord = ссылка на ячейку или непосредственно текст 'Metod = 0 – числа 'Metod = 1 – текст Dim sSymbol As String, sInsertWord As String Dim i As Integer If sWord = "" Then Extract_Number_from_Text = "Нет данных!": Exit Function sInsertWord = "" sSymbol = "" For i = 1 To Len(sWord) sSymbol = Mid(sWord, i, 1) If Metod = 1 Then If Not LCase(sSymbol) Like "*[0-9]*" Then If (sSymbol = "," Or sSymbol = "." Or sSymbol = " ") And i > 1 Then If Mid(sWord, i - 1, 1) Like "*[0-9]*" And Mid(sWord, i + 1, 1) Like "*[0-9]*" Then sSymbol = "" End If End If sInsertWord = sInsertWord & sSymbol End If Else If LCase(sSymbol) Like "*[0-9.,;:-]*" Then If LCase(sSymbol) Like "*[.,]*" And i > 1 Then If Not Mid(sWord, i - 1, 1) Like "*[0-9]*" Or Not Mid(sWord, i + 1, 1) Like "*[0-9]*" Then sSymbol = "" End If End If sInsertWord = sInsertWord & sSymbol End If End If Next i Extract_Number_from_Text = sInsertWord End Function
Чтобы правильно использовать приведенный код, необходимо сначала ознакомиться со статьей Что такое функция пользователя(UDF)?. Вкратце: скопировать текст кода выше, перейти в редактор VBA(Alt+F11) -создать стандартный модуль(Insert —Module) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций(Shift+F3), отыскав её в категории Определенные пользователем (User Defined Functions) и применять как обычную функцию на листе.
Для извлечения только чисел
=Extract_Number_from_Text(A1; 0)
или
=Extract_Number_from_Text(A1)
Для извлечения только текста
=Extract_Number_from_Text(A1; 1)
Подробнее про создание пользовательских функции и их применении можно почитать в статье Что такое функция пользователя(UDF)?
Помимо функции пользователя решил выложить и вариант с использованием диалогового окна:
Выбрать ячейку или диапазон с текстом(Лист1!$A$2:$A$10) — здесь указывается диапазон с исходными значениями, из которого необходимо оставить только числа или только текст.
Выберите ячейку для вывода данных(Лист1!$A$2) — указывается одна ячейка, с которой начать вывод преобразованных значений. В качестве этой ячейки можно выбрать первую ячейку диапазона с текстом(исходного) если необходимо произвести изменения сразу в этих же ячейках(как на рисунке). Осторожнее с таким указанием, т.к. результат работы кода может быть не совсем таким, какой вы ожидали, а вернуть прежние данные уже не получится — если только не закрыть файл без сохранения изменений.
Оставить только цифры, Оставить только текст— думаю не надо пояснять. Здесь выбираем, что оставить в качестве результата.
Небольшое дополнение к использованию кода
В коде есть строка:
If LCase(sSymbol) Like "*[0-9.,;:-]*" Then
Данная строка отвечает за текстовые символы, которые могут встречаться внутри чисел и которые надо оставить(не удалять наравне с другими не числовыми символами). Следовательно, если какие-то из данных символов не нужны в конечном тексте — их надо просто удалить. Например, чтобы оставались исключительно числа(без запятых и пр.):
If LCase(sSymbol) Like "*[0-9]*" Then
если надо исключить из удаления помимо цифр точку(т.е. будут извлечены цифры и точка):
If LCase(sSymbol) Like "*[0-9.]*" Then
и т.д.
Скачать пример:
Число из текста и наоборот.xls (99,0 KiB, 17 669 скачиваний)
Также см.:
Извлечение числа из текста
Что такое функция пользователя(UDF)?
Как получить адрес гиперссылки из ячейки
Оставить цифры или текст при помощи PowerQuery
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Содержание
- Как в Microsoft Excel извлечь число из ячейки с текстом самый простой и быстрый способ
- Excel извлекаем число из текста
- Как оставить в ячейке только цифры или только текст?
- Поиск по меткам
Как в Microsoft Excel извлечь число из ячейки с текстом самый простой и быстрый способ
Excel это очень мощный и функциональный инструмент, с помощью которого можно создавать целые проекты, с интерфейсом, запрограммированными кнопками и многим другим. Но в большинстве случаев с его помощью создают обычные таблицы, в которых с помощью простеньких формул производят различные вычисления. Рассказать про все возможности Excel просто не реально, особенно в рамках одной статьи. Поэтому Я периодически пишу небольшие заметки, посвященные различным полезным функциям и возможность электронных таблиц, которые могут существенно ускорить и упростить работу с ними. В сегодняшней статье расскажу про то как можно извлечь число из ячейки в которой оно напечатано вместе с текстом. Способов это сделать несколько, чаще всего все рекомендую использовать для это специальные функции (формулы), но есть вариант намного проще.
Excel извлекаем число из текста
И так допустим в таблице есть ячейки в которых числа напечатаны вместе с текстом.
Для того чтобы из таких ячеек извлечь только числа нужно выполнить простое действие. В первой ячейки набираем число с клавиатуры, курсор ставить в следующею ячейку.
И нажимаем сочетание клавиш «Ctrl+E», буква «Е» английская, после этого автоматически из всех оставшихся ячеек будет извлечено только число.
Это самый простой и быстрый способ извлечь число из ячейки с текстом в офисном пакете Microsoft Excel, но если Вы знаете другой то обязательно напишите об этом.
Источник
Как оставить в ячейке только цифры или только текст?
Вот бывает так: есть у Вас в ячейке некий текст. Допустим «Было доставлено кусков мыла 763шт.». Вам нужно из этого только 763 — чтобы можно было провести с этим некие математические действия. Если это только одна ячейка — проблем тут нет, а если таких ячеек пару тысяч? И к тому же все разные?
- Было доставлено кусков мыла 763шт.
- Всего пришло 34
- Тюбики — 54 доставлено
- и т.д.
Никакой зацепки для извлечения данных. Пару тысяч таких строк удалять вручную весьма утомительное занятие, надо сказать. Да еще и не быстрое.
Есть несколько вариантов решения подобной задачи.
СПОСОБ 1: не используем макросы
можно применить формулу массива, вроде такой:
=ПСТР( A1 ;МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР( A1 ;СТРОКА( $1:$99 );1));СТРОКА( $1:$99 )));ПРОСМОТР(2;1/ЕЧИСЛО(-ПСТР( A1 ;СТРОКА( $1:$99 );1));СТРОКА( $1:$99 ))-МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР( A1 ;СТРОКА( $1:$99 );1));СТРОКА( $1:$99 )))+1)
Три важных момента:
- Формула вводится в ячейку сочетанием клавиш Ctrl+Shift+Enter, т.к. является формулой массива. Подробнее про эти формулы читайте в статье: Что такое формула массива
- в таком виде формула работает с текстом, количество символов в котором не превышает 99. Чтобы расширить необходимо в формуле во всех местах заменить СТРОКА( $1:$99 ) на СТРОКА( $1:$200 ) . Т.е. вместо 99 указать количество символов с запасом. Только не увлекайтесь, иначе может получиться, что формула будет работать слишком долго
- формула не обработает корректно текст » Было доставлено кусков мыла 763шт., а заказывали 780 » и ему подобный, где числа раскиданы по тексту.
Теперь коротко разберем формулу на примере фразы: Было доставлено кусков мыла 763шт.
- в A1 сам текст, из которого необходимо извлечь числа: Было доставлено кусков мыла 763шт., а заказывали 780
- блок: МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР( A1 ;СТРОКА( $1:$99 );1));СТРОКА( $1:$99 )))
вычисляет позицию первой цифры в ячейке — 29 - блок: ПРОСМОТР(2;1/ЕЧИСЛО(-ПСТР( A1 ;СТРОКА( $1:$99 );1));СТРОКА( $1:$99 ))
вычисляет позицию последней цифры в ячейке — 31 - в результате получается: =ПСТР( A1 ;29;31—29+1)
функция ПСТР извлекает из текста, указанного первым аргументом( A1 ) текст, начиная с указанной позиции(29) с количеством символов, указанным третьим аргументом(31—29+1) - И в итоге:
=ПСТР( A1 ;29;31—29+1)
=> =ПСТР( A1 ;29;2+1)
=> =ПСТР( A1 ;29;3)
=> 763
Может быть задача проще — необходимо извлечь односоставной текст, убрав цифры вначале и в конце строки, учитывая, что сам текст всегда следует после разделителя(например, тире):
12.08-АГСВ2
12.08-АГСВ1
01.03-ОВ2
12.03-КЖ6.1
Из этих данных надо получить только текст после тире(-) и отсечь цифры на конце:
АГСВ
АГСВ
ОВ
КЖ
Формула будет работать почти по тому же принципу, что и формула выше, но она проще:
=ПСТР( A1 ;ПОИСК(«-«; A1 )+1;ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(—ПСТР(ПСТР( A1 ;ПОИСК(«-«; A1 )+1;999);СТРОКА( $1:$99 );1));0)-1)
В данном случае мы при помощи ПОИСК(«-«; A1 ) ищем сначала позицию тире, далее при помощи ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(—ПСТР(ПСТР( A1 ;ПОИСК(«-«; A1 )+1;999);СТРОКА( $1:$99 );1));0) находим именно в отсеченном тексте позицию первой цифры. Передаем эти значения в ПСТР , которая отбирает из этого текста все от первого тире(+1) до первого числа, идущего после текста.
СПОСОБ 2: используем макросы
Самый главный недостаток метода при помощи формулы, приведенной выше — из текста » Было доставлено кусков мыла 763шт., а заказывали 780 » формула вернет не только числа, а и текст между первой и последней цифрой: 763шт., а заказывали 780 .
Решить же проблему извлечения цифр даже из такого текста при помощи VBA куда проще и гибче. Плюс можно не только цифры извлекать, но и наоборот — цифры удалить, а извлечь только текст. Ниже приведен код пользовательской функции, которая поможет извлечь из строки только числа либо только текст. Иными словами, результатом функции будет либо только текст, либо только числа.
Function Extract_Number_from_Text(sWord As String, Optional Metod As Integer) ‘sWord = ссылка на ячейку или непосредственно текст ‘Metod = 0 – числа ‘Metod = 1 – текст Dim sSymbol As String, sInsertWord As String Dim i As Integer If sWord = «» Then Extract_Number_from_Text = «Нет данных!»: Exit Function sInsertWord = «» sSymbol = «» For i = 1 To Len(sWord) sSymbol = Mid(sWord, i, 1) If Metod = 1 Then If Not LCase(sSymbol) Like «*[0-9]*» Then If (sSymbol = «,» Or sSymbol = «.» Or sSymbol = » «) And i > 1 Then If Mid(sWord, i — 1, 1) Like «*[0-9]*» And Mid(sWord, i + 1, 1) Like «*[0-9]*» Then sSymbol = «» End If End If sInsertWord = sInsertWord & sSymbol End If Else If LCase(sSymbol) Like «*[0-9.,;:-]*» Then If LCase(sSymbol) Like «*[.,]*» And i > 1 Then If Not Mid(sWord, i — 1, 1) Like «*[0-9]*» Or Not Mid(sWord, i + 1, 1) Like «*[0-9]*» Then sSymbol = «» End If End If sInsertWord = sInsertWord & sSymbol End If End If Next i Extract_Number_from_Text = sInsertWord End Function
Данный код необходимо поместить в стандартный модуль книги. После этого в мастере функций в категории Определенные пользователем (User Defined) будет доступна функция Extract_Number_from_Text , которую можно будет применять как обычную функцию на листе.
Для извлечения только чисел
=Extract_Number_from_Text( A1 ; 0)
или
=Extract_Number_from_Text( A1 )
Для извлечения только текста
=Extract_Number_from_Text( A1 ; 1)
Подробнее про создание пользовательских функции и их применении можно почитать в статье Что такое функция пользователя(UDF)?
Помимо функции пользователя решил выложить и вариант с использованием диалогового окна:
Выбрать ячейку или диапазон с текстом(Лист1! $A$2:$A$10 ) — здесь указывается диапазон с исходными значениями, из которого необходимо оставить только числа или только текст.
Выберите ячейку для вывода данных(Лист1! $A$2 ) — указывается одна ячейка, с которой начать вывод преобразованных значений. В качестве этой ячейки можно выбрать первую ячейку диапазона с текстом(исходного) если необходимо произвести изменения сразу в этих же ячейках(как на рисунке). Осторожнее с таким указанием, т.к. результат работы кода может быть не совсем таким, какой вы ожидали, а вернуть прежние данные уже не получится — если только не закрыть файл без сохранения изменений.
Оставить только цифры, Оставить только текст— думаю не надо пояснять. Здесь выбираем, что оставить в качестве результата.
Небольшое дополнение к использованию кода
В коде есть строка:
If LCase(sSymbol) Like «*[0-9.,;:-]*» Then
Данная строка отвечает за текстовые символы, которые могут встречаться внутри чисел и которые надо оставить(не удалять наравне с другими не числовыми символами). Следовательно, если какие-то из данных символов не нужны в конечном тексте — их надо просто удалить. Например, чтобы оставались исключительно числа(без запятых и пр.):
If LCase(sSymbol) Like «*[0-9]*» Then
если надо исключить из удаления помимо цифр точку(т.е. будут извлечены цифры и точка):
If LCase(sSymbol) Like «*[0-9.]*» Then
и т.д.
Скачать пример:
Число из текста и наоборот.xls (99,0 KiB, 17 601 скачиваний)
Статья помогла? Поделись ссылкой с друзьями!
Поиск по меткам
Здравствуйте скрипт при обработке ячейки:
Пр-ка ТНВД 5301 (пер.) 50-1006315-Б2 выдает: 530150-1006315-2
вопрос есть возможность что бы он брал только последних 15-20 сим.
с заглавными А-Я, или хотя бы цифирки.
Буду признателен за предложения.
Возможно есть проще варианты(12000 стр.записеи) обрезани до последних 10-20сим.
Александр, последние 15-20 символов можно взять при помощи функции ПРАВСИМВ(RIGHT). Так же можно совместить:
=Extract_Number_from_Text(ПРАВСИМВ(A1))
Более сложные вариации извлечения делаются под конкретные данные с учетом различных нюансов.
Добрый день!
Спасибо за замечательный код! Подскажите пожалуйста, как оставить среди неудаляемых символов пробел?
Например, в ячейке было «Т-образный поворот SPB-RF60 TE-200 SS316L».
Ваш код оставляет (после некоторой модификации) «60200316».
А хотелось бы «60 200 316».
Я не понимаю как вписать пробел в строку
Like «*[0-9.,;:-]*» Then
А всё разобрался, пробел нужно указывать в середине ряда, а не в конце.
Здравствуйте.
Использовал функцию, вызванную на VBA, все нормально, при вызове мастера функций он нормально отрабатывает
Но при выполнение в эксель, выскакивает сообщение, что здесь используется циклическая ссылка и потом появляется значение 0. В чем дело?
Добрый день!
А что надо добавить в код/формулу чтобы из строки
«ТП ВЕТЧИННАЯ ВАРЕНАЯ 400Г (162854) /Ш/»
— вытащить только цифры до буквы Г?
— или без содержимого скобок
Заранее большое спасибо!
Нашла пока только такой вариант решения:
=ЛЕВСИМВ(B5;ПОИСК(«г «;B5)-1)
Затем в другой колонке
=ЕСЛИОШИБКА(ПСТР(C5;МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР(C5;СТРОКА($1:$99);1));СТРОКА($1:$99)));ПРОСМОТР(2;1/ЕЧИСЛО(-ПСТР(C5;СТРОКА($1:$99);1));СТРОКА($1:$99))-МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР(C5;СТРОКА($1:$99);1));СТРОКА($1:$99)))+1);1000)
И в третьей колонке = из предыдущей и преобразовать в числовой формат макросом
Результат достигнут, но если расскажите как можно было сделать изящнее — обязательно запомню))
Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String On Error GoTo ErrHandl Set regex = CreateObject(«VBScript.RegExp») regex.Pattern = Pattern regex.Global = True If regex.Test(Text) Then Set matches = regex.Execute(Text) RegExpExtract = matches.Item(Item — 1) Exit Function End If ErrHandl: RegExpExtract = CVErr(xlErrValue) End Function
И играйтесь регулярками, на лету выбирая нужные части текста. Инфы с примерами, благо, достаточно.
Денис, спасибо. Но есть все равно пара замечаний, раз уж предлагаете воспользоваться функцией. Неплохо было бы добавить и пример применения. Иначе как тому, кто зайдет почитать использовать Ваше решение?
Я умею использовать регулярки и по коду вижу, что помимо текста надо указать не только шаблон, но еще и номер элемента, который получить. Что является немаловажным замечанием.
Для извлечения первого числа(без разделения групп разрядов) — =(RegExpExtract( A1 ;»d»;1)
Для извлечения первого текста(что не очень удобно, если чисел в тексте много) — =(RegExpExtract( A1 ;»D»;1)
Оба варианта слегка халтурны, но для понимания общего смысла использования подойдут.
В общем и целом я бы в функцию еще параметр IgnoreCase добавил(при извлечении текста по шаблону может потребоваться). Да и Multiline тоже иногда может играть роль(зависит от шаблона и текста), поэтому его тоже лучше ставить в True сразу в случае с такими функциями.
Источник
Skip to content
В этом кратком руководстве показано, как можно быстро извлекать число из различных текстовых выражений в Excel с помощью формул или специального инструмента «Извлечь».
Проблема выделения числа из текста возникает достаточно часто, особенно когда вы работаете с данными, полученными из других программ. К примеру, нужно вытащить почтовый индекс из адреса, номенклатурный номер из строки с наименованием товара, номер счета из платежного документа. Нужное нам число может находиться в любом месте текста — в начале, в середине или в конце.
Вот что мы рассмотрим в этой статье:
- Как извлечь число в конце текста
- Получаем число из начала текста
- Как извлечь все числа из текста
- Извлекаем числа без формул при помощи Ultimate Suite
Когда дело доходит до извлечения части текстового значения заданной длины, Эксель предоставляет три текстовых функции (ЛЕВСИМВ, ПРАВСИМВ и ПСТР) для быстрого выполнения этой задачи. А вот когда дело доходит до извлечения числа из буквенно-цифровой строки, Microsoft Excel … не предоставляет ничего.
Чтобы извлечь число из текста в Excel, требуется немного изобретательности, немного терпения и множество различных функций, вложенных друг в друга.
Или вы можете запустить инструмент «Извлечь (Extract)» из надстройки Ablebits Ultimate Suite и выполнить эту операцию одним щелчком мыши. Ниже вы найдете полную информацию обо всех этих методах.
Как извлечь число из конца текстовой строки.
Если у вас есть столбец буквенно-цифровых значений, в котором число всегда идет после текста, вы можете использовать одну из следующих формул, чтобы вытащить из них числа.
Важное замечание! В приведенных ниже формулах извлечение выполняется с помощью функций ПРАВСИМВ и ЛЕВСИМВ, которые относятся к категории текстовых функций. Эти функции всегда возвращают текст. В нашем случае результатом будет числовая подстрока, которая с точки зрения Excel также является текстом, а не числом. Если вам нужно, чтобы результат был числом (которое можно использовать в дальнейших вычислениях), оберните соответствующую формулу в функцию ЗНАЧЕН, или выполните с ней простейшую математическую операцию (например, двойное отрицание).
Чтобы извлечь число из строки «текстовое число», первое, что вам нужно знать, — это с какой позиции начать операцию. Итак, давайте определим положение первой цифры с помощью этой общего выражения:
=МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9}; ячейка &»0123456789″))
О логике вычислений мы поговорим чуть позже. На данный момент просто замените слово «ячейка» ссылкой на позицию, содержащую исходный текст (в нашем случае A2), и запишите получившееся выражение в любую пустую клетку той же строки, скажем, в B2:
=МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9};A2&»0123456789″))
Хотя формула содержит константу массива, это обычное выражение, которое вводится обычным способом: нажатием клавиши Enter.
Как только позиция первой цифры определена, можно использовать функцию ПРАВСИМВ для извлечения числа. Чтобы узнать, сколько символов нужно извлечь, вы вычитаете позицию первой цифры из общей длины строки и добавляете единицу к результату, потому что первая цифра также должна быть включена:
=ПРАВСИМВ(A2;ДЛСТР(A2)-B2+1)
Где A2 — исходная ячейка, а B2 — позиция первой цифры.
На следующем скриншоте показаны результаты:
Чтобы исключить вспомогательный столбец, содержащий позицию первой цифры, вы можете встроить формулу МИН непосредственно в функцию ПРАВСИМВ следующим образом:
=ПРАВСИМВ(A2;ДЛСТР(A2)-МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9};A2&»0123456789″))+1)
Чтобы формула возвращала именно число, а не числовую строку, вложите ее в функцию ЗНАЧЕН:
=ЗНАЧЕН(ПРАВСИМВ(A2;ДЛСТР(A2)-МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9};A2&»0123456789″))+1))
Или просто примените двойное отрицание, использовав два знака «минус»:
=—ПРАВСИМВ(A2;ДЛСТР(A2)-МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9};A2&»0123456789″))+1)
Другой способ извлечь число из конца строки — использовать вот такое выражение:
=ПРАВСИМВ( ячейка ;СУММ(ДЛСТР( ячейка ) — ДЛСТР(ПОДСТАВИТЬ( ячейка ; {«0″;»1″;»2″;»3″;»4″;»5″;»6″;»7″;»8″;»9″};»»))))
Используя исходный текст в A2, вы записываете приведенную ниже формулу в B2 или любую другую пустую ячейку в той же строке, а затем копируете её вниз по столбцу:
=ПРАВСИМВ(A2;СУММ(ДЛСТР(A2) — ДЛСТР(ПОДСТАВИТЬ(A2; {«0″;»1″;»2″;»3″;»4″;»5″;»6″;»7″;»8″;»9″};»»))))
Примечание. Эти формулы предназначены для случая, когда числа находятся только в конце текстовой строки. Если некоторые цифры также находятся в середине или в начале, то ничего не будет работать.
Этих недостатков не имеет третья формула, которая извлекает только последнее число в тексте, игнорируя все предыдущие:
=ПРАВСИМВ(A2; ДЛСТР(A2) — МАКС(ЕСЛИ(ЕЧИСЛО(ПСТР(A2; СТРОКА(ДВССЫЛ( «1:»&ДЛСТР(A2))); 1) *1)=ЛОЖЬ; СТРОКА(ДВССЫЛ( «1:»&ДЛСТР(A2))); 0)))
На скриншоте ниже вы видите результат ее работы.
Как видите, цифры в начале или в середине текста игнорируются. Также обратите внимание, что результатом, как и в предыдущих формулах, является число, записанное в виде текста. Как превратить его в нормальное число, мы уже рассмотрели выше в этой статье.
Примечание. Если вы используете Excel 2019 или более ранние версии, нужно использовать формулу массива, нажав при вводе комбинацию Ctrl+Shift+Enter
. Если у вас Office365, вводите как обычно, через Enter
.
Как извлечь число из начала текстовой строки
Если вы работаете со строками, в которых текст находится после числа, решение для извлечения числа будет аналогично описанному выше. С той только разницей, что вы используете функцию ЛЕВСИМВ для извлечения из левой части текста:
=ЛЕВСИМВ( ячейка ;СУММ(ДЛСТР( ячейка )-ДЛСТР(ПОДСТАВИТЬ( ячейка ;{«0″;»1″;»2″;»3″;»4″;»5″;»6″;»7″;»8″;»9″};»»))))
Используя этот метод для A2, извлекаем число при помощи такого выражения:
=ЛЕВСИМВ(A2;СУММ(ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;{«0″;»1″;»2″;»3″;»4″;»5″;»6″;»7″;»8″;»9″};»»))))
Это решение работает для текстовых выражений, которые содержат числа только в начале. Если некоторые цифры также находятся в середине или в конце строки, формула не будет работать.
Если вы хотите извлечь только числа слева и игнорировать остальные, воспользуйтесь другой формулой:
=ЛЕВСИМВ(A2;ПОИСКПОЗ(ЛОЖЬ;ЕЧИСЛО(—ПСТР(A2;СТРОКА($1:$94);1));0)-1)
Или чуть модифицируем, чтобы ускорить расчеты:
=ЛЕВСИМВ(A2; ПОИСКПОЗ(ЛОЖЬ; ЕЧИСЛО(ПСТР(A2; СТРОКА(ДВССЫЛ( «1:»&ДЛСТР(A2)+1)); 1) *1); 0) -1)
Если у вас Excel 2019 и ниже, вводите ее как формулу массива, используя Ctrl+Shift+Enter
. В Office365 и выше можно вводить как обычно.
Примечание. Как и в случае с функцией ПРАВСИМВ, функция ЛЕВСИМВ также возвращает числовую подстроку, которая технически является текстом, а не числом.
Как получить число из любой позиции в тексте
Если ваша задача подразумевает извлечение числа из любого места строки, вы можете использовать следующую формулу:
=СУММПРОИЗВ(ПСТР(0&A2; НАИБОЛЬШИЙ(ИНДЕКС(ЕЧИСЛО(—ПСТР(A2; СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))); 1)) * СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))); 0); СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))))+1; 1) * 10^СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2)))/10)
Где A2 — исходная текстовая строка.
Для пояснения, как это работает, потребуется отдельная статья. Поэтому вы можете просто скопировать на свой рабочий лист, чтобы убедиться, что это действительно работает
Обратите внимание, что в этом случае в тексте могут находиться несколько чисел. Все они будут извлечены и объединены в единое целое.
Однако, изучив результаты, вы можете заметить один незначительный недостаток: если исходный текст в ячейке не содержит числа, формула возвращает ноль, как в строке 7 на скриншоте выше. Чтобы исправить это, вы можете заключить формулу в оператор ЕСЛИ, который проверит, содержит ли исходный текст какое-либо число. Если это так, формула извлекает это число, в противном случае возвращает пустую строку:
=ЕСЛИ(СУММ(ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;{«0″;»1″;»2″;»3″;»4″;»5″;»6″;»7″;»8″;»9″};»»)))>0; СУММПРОИЗВ(ПСТР(0&A2; НАИБОЛЬШИЙ(ИНДЕКС(ЕЧИСЛО(—ПСТР(A2; СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))); 1)) * СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))); 0); СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))))+1; 1) * 10^СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2)))/10);»»)
В отличие от всех предыдущих примеров, результатом этих формул является число. Чтобы убедиться в этом, просто обратите внимание на выровненные по правому краю значения в столбце B и усеченные ведущие нули (например, 88 вместо 088).
Если число, которое вы хотите извлечь, ограничено какими-то знаками-разделителями, то можно использовать функцию ПСТР. Рассмотрим пример, как получить номер счета из текста платежа.
Мы будем искать позицию знака «№» и позицию следующего за ним первого пробела. То, что находится между ними, как раз и будет номером счёта:
=ПСТР(ПОДСТАВИТЬ(A2;» «;»»);НАЙТИ(«№»;ПОДСТАВИТЬ(A2;» «;»»))+1;НАЙТИ(» «;A2;НАЙТИ(«№»;A2;1))-НАЙТИ(«№»;A2;1)-1)
На скриншоте ниже вы видите, как это работает.
Вот еще один возможный вариант вынимания числа из текста. Необходимо извлечь первое встретившееся число из текста.
Используем формулу
=ПРОСМОТР(2^64;—ЛЕВСИМВ(ПСТР(A1&»_0″;МИН(НАЙТИ({0;1;2;3;4;5;6;7;8;9};A1&»_0123456789″));15); {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}))
или заменяем список цифр функцией:
=ПРОСМОТР(2^64;—ЛЕВСИМВ(ПСТР(A1&»_0″;МИН(НАЙТИ({0;1;2;3;4;5;6;7;8;9};A1&»_0123456789″));15); СТРОКА($A$1:$IV$16)))
Как видите, получаем только первое число, независимо от его расположения:
И еще один пример. Давайте попробуем достать все числа из текста, разграничив их каким-то разделителем. Например, дефисом “-“.
В этом случае придется использовать формулу массива:
{=ПОДСТАВИТЬ(СЖПРОБЕЛЫ(СЦЕП(ЕСЛИ(ЕЧИСЛО(—ПСТР(A2;СТРОКА($1:$94);1));ПСТР(A2;СТРОКА($1:$94);1);» «)));» «;»-«)}
Мы нашли все числа в тексте, как вы видите на скриншоте ниже:
Откорректировав эту формулу, вы можете использовать любой другой разделитель.
Поскольку между ними есть разделители, то вы легко можете распределить эти числа в отдельные ячейки. Как это сделать — читайте в материале 8 способов разделить ячейку Excel на две или несколько.
Как выделить число из текста с помощью Ultimate Suite
Как вы только что видели, не существует простой и понятной формулы Excel для извлечения чисел из текстовой строки. Если у вас есть трудности с пониманием формул или их настройкой для ваших наборов данных, вам может понравиться этот простой способ получить число из текста в Excel.
С надстройкой Ultimate Suite, добавленной на вашу ленту Excel, вы можете быстро получить число из любой буквенно-цифровой строки:
- Перейдите на вкладку Ablebits Data > Text и нажмите Извлечь (Extract) :
- Выделите все ячейки с данными, которые нужно обработать.
- На панели инструмента «Извлечь (Extract)» установите переключатель «Извлечь числа (Extract numbers)».
- В зависимости от того, хотите ли вы, чтобы результаты были формулами или значениями, выберите поле «Вставить как формулу (Insert as formula)» или оставьте его пустым (по умолчанию).
Я советую активировать это поле, если вы хотите, чтобы извлеченные числа обновлялись автоматически, как только в исходные значения вносятся какие-либо изменения. Если нужно, чтобы результаты не зависели от будущих изменений (например, если вы планируете удалить исходные данные позже), не используйте эту опцию.
- Нажмите кнопку «Вставить результаты (Insert Results)». Готово!
Как и в предыдущем примере, результаты извлечения являются числами. Это означает, что вы можете подсчитывать, суммировать, усреднять или выполнять любые другие вычисления с ними.
Если установлен флажок «Вставить как формулу», вы увидите выражение в строке формул. Любопытно узнать, какое именно? Просто скачайте пробную версию Ultimate Suite и убедитесь сами
Если вы хотите иметь это, а также еще более 60 полезных инструментов в Excel, воспользуйтесь этой надстройкой.
Я постарался дать вам максимально полные рекомендации, какими способами можно извлечь число из текста. Конечно, они не могут охватить все возможные случаи. Поэтому если встретилось что-то особенно заковыристое — не стесняйтесь писать в комментариях. Постараюсь помочь по мере сил.
Если на вашем листе есть список чисел, который содержит целые числа (целые числа) и десятичные числа, теперь вы хотите отфильтровать только целые или нецелые числа из данных списка, как показано на следующих снимках экрана, как вы могли бы решить это в Excel?
- Фильтровать целые числа (целые числа) или десятичные числа с помощью вспомогательного столбца
- Фильтрация только целых (целых) или десятичных чисел путем извлечения десятичных чисел
- Фильтруйте целые числа (целые числа) или десятичные числа с помощью Kutools for Excel
Фильтровать целые числа (целые числа) или десятичные числа с помощью вспомогательного столбца
В Excel вы можете сначала определить целые или десятичные числа с помощью формулы, а затем отфильтровать нужные числа по мере необходимости. Пожалуйста, сделайте следующее:
1. Рядом со столбцом чисел введите эту формулу = ЦЕЛОЕ (A2) = A2 в пустую ячейку B2, см. снимок экрана:
2. Затем перетащите маркер заполнения к ячейкам, которые вы хотите содержать эту формулу, ИСТИНА указывает целые числа и НЕПРАВДА указывает десятичные числа, см. снимок экрана:
3. Затем выберите столбец B и нажмите Данные > Фильтр чтобы отфильтровать нужные числа по своему усмотрению.
4. Нажмите рядом с ячейкой B1, а затем установите флажок Правда or Ложь как вам нужно, см. снимок экрана:
5. Затем нажмите OK, все нужные числа были отфильтрованы. Если вы проверите Правда вариант, вы отфильтруете только целые числа, и если вы отметите Ложь вариант, вы получите все десятичные числа. Смотрите скриншоты:
6. Наконец, вы можете удалить вспомогательный столбец по мере необходимости.
Легко извлекайте только целые числа или десятичные числа из числовых ячеек в Excel
Если мы можем извлекать только целые числа из чисел и размещать их помимо исходных числовых ячеек, мы можем легко отфильтровать целые числа или десятичные числа с помощью этого вспомогательного столбца в Excel.
Фильтр только целые числа (целые числа) или десятичные числа путем извлечения десятичных чисел
Если вы можете извлечь числа после десятичного числа и поместить извлеченные числа помимо исходного числа, мы можем легко фильтровать целые или десятичные числа с помощью этого нового вспомогательного столбца в Excel. Здесь я представлю Kutools for ExcelУтилита Extract Text, чтобы заархивировать его.
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
1. Выберите числовые ячейки, которые вы будете фильтровать, и нажмите Кутулс > Текст > Извлечь текст.
2. В открывшемся диалоговом окне «Извлечь текст» введите .* в Текст поле, нажмите Добавить кнопку, затем проверьте только новое добавленное правило в Извлечь список и нажмите Ok кнопку.
Помещаем извлеченные числа помимо исходного столбца. Смотрите скриншот:
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
3. Выберите ячейку над извлеченными числами (в нашем случае ячейку B1) и нажмите Данные > Фильтр. А затем щелкните стрелку в ячейке и укажите правило фильтрации, как показано ниже:
(1) Для фильтрации только целых чисел снимите флажок Выбрать все вариант во-первых, затем проверьте (Пробелы) только вариант и щелкните OK кнопка;
(2) Для фильтрации только десятичных чисел проверьте Выбрать все вариант во-первых, затем снимите флажок (Пробелы) только параметры и щелкните OK кнопку.
Теперь сразу отфильтровываются только целые или десятичные числа.
Фильтровать только целые числа (целые числа) или десятичные числа с Kutools for Excel
Если у вас есть Kutools for Excel установлен, вы можете применить его утилиту Super Filter, чтобы легко отфильтровать только целое число или только десятичные числа. Вы можете сделать следующее:
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
1. Включите панель Super Filter, нажав кнопку Кутулс Плюс > Суперфильтр.
2. На открывшейся панели суперфильтра сделайте следующее:
(1) Щелкните значок Приложения и выберите диапазон данных, который вы будете фильтровать.
(2) Наведите указатель мыши на значок «Или», чтобы отобразить раздел критериев фильтрации, щелкните первое поле и укажите столбец, который вы будете фильтровать по целому или десятичному числу;
(3) Щелкните второе поле и выберите Текст из выпадающего списка;
(4) Щелкните третье поле и выберите Комплект из выпадающего списка.
Внимание: Если вы хотите отфильтровать только целые числа, выберите Не содержит из выпадающего списка.
(5) В последнем поле введите точку «.». См. Снимок экрана ниже:
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
3. Нажмите Фильтр кнопку.
Теперь вы увидите только целые числа или только десятичные числа отфильтрованы, как показано на следующем снимке экрана:
Демо: фильтрация только целых (целых) или десятичных чисел в Excel
Статьи по теме:
Как фильтровать данные по кварталу в Excel?
Как отфильтровать данные, начинающиеся с цифры или буквы в Excel?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Оставить в ячейке только числа (удалить весь текст)
Данная команда позволяет массово удалять из текст множества ячеек весь текст кроме чисел:
Чтобы воспользоваться данной командой выделите ячейки с текстом из которых вы хотите удалить текст и оставить числа, перейдите во вкладку «ЁXCEL» Главного меню, нажмите кнопку «Ячейки» и выберите команду «Оставить в ячейке только числа (удалить весь текст)»:
В выделенных ячейках останутся только числа.
Для отмены операции нажмите кнопку отмены: