Очень жаль, но в Excel на данный момент нет функции, чтобы «достать» число из ячейки, в которой содержится текст.
Но, мы можем использовать комбинацию функций или Visual Basic для выполнения этой задачи.
О чем я?
Допустим, у нас есть обычная ячейка с текстом, в которой есть еще и число (пример на картинке ниже):
И нам необходимо это число записать в отдельной ячейке.
Итак, начнем!
Узнайте Excel как свои пять пальцев на курсе по таблицам от Skillbox
- Как извлечь число из текстовой строки в Excel 2016
- Что функция делает?
- Как извлечь число из текстовой строки в Excel более ранних версий
- Как разделить строку на текст и число с помощью Visual Basic
- Извлекаем только число из текстовой строки используя Visual Basic
- Извлекаем только текст из строки используя Visual Basic
Как извлечь число из текстовой строки в Excel 2016
Этот способ будет работать только в Excel 2016 и выше, потому что функция, которую мы будем использовать, была добавлена только в этой версии программы.
Мы будем использовать функцию ОБЪЕДИНИТЬ. Что она делает? Она извлекает все численные значения из строки. Например, у нас есть строка: «Витя купил мороженку за 100 рублей, а Вася за 20 рублей». Результатом выполнения функции будет число «10020».
Формула:
=ОБЪЕДИНИТЬ("";ИСТИНА;ЕСЛИОШИБКА((ПСТР(A2;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A2)));1)*1);""))
Так как мы работаем с массивом, после написания формулы в ячейку нажмите CTRL + SHIFT + ENTER.
В случае, когда в строке нет ни одной цифры, результатом выполнения функции будет пустая строка.
Что функция делает?
Давайте разберем функцию по частям:
- СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))) — вычисление начнется с функции ДЛСТР, она вернет нам длину строки. Функция строка вернет массив чисел начиная с 1 и заканчивая тем числом, которое равняется длине нашей строки.
- (ПСТР(A2,СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2)))),1)*1) — в этой части функции «отметаются» все текстовые значения, они все «падают» в ошибку #!ЗНАЧЕНИЕ. А численные значения остаются.
- ЕСЛИОШИБКА((ПСТР(A2,СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))),1)*1),»») — в этой части функции все ошибки, полученные ранее удаляются и остаются только численные значения.
- =ОБЪЕДИНИТЬ(«»;ИСТИНА;ЕСЛИОШИБКА((ПСТР(A2;СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2)));1)*1);»»)) — и, наконец, все значения полученные ранее просто объединяются функцией ОБЪЕДИНИТЬ.
Важная информация: если у вас что-то не получается, вы можете проверить вывод отдельных частей функции с помощью горячей клавиши F2.
По аналогии мы можем получить только текстовое значение из строки (удаляя все числа). Формула функции будет такой:
=ОБЪЕДИНИТЬ("";ИСТИНА;ЕСЛИ(ЕОШИБКА(ПСТР(A2;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A2)));1)*1);ПСТР(A2;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A2)));1);""))))
Разница между этими формулами в том, что функция ЕСЛИ проверяет ошибка ли полученное от ПСТР значение или нет.
Также, как и в прошлом варианте, функция ОБЪЕДИНИТЬ используется для объединения значений.
Важная информация: эта функция довольно сложная и требует некоторой вычислительной мощности. Поэтому когда вы используете эту функцию для обработки большого количества данных, имейте в виду, что это может занять некоторое время.
Как извлечь число из текстовой строки в Excel более ранних версий
Итак, в более ранних версиях Excel функции ОБЪЕДИНИТЬ еще нет. Поэтому придется использовать кое-что другое.
Допустим, у нас та же задача:
В таком случае, формула будет такой:
=ЕСЛИ(СУММ(ДЛСТР(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);"")
Также, как и в Excel 2016 если функция не нашла чисел, результатом будет пустая строка.
Рекомендуем курс Excel по анализу данных от Skypro — очень глубокое и яркое погружение в Эксель.
Функция довольно сложная и «тяжелая» — поэтому, при работе с большими объемами данных, её выполнение может занять какое-то время.
Как разделить строку на текст и число с помощью Visual Basic
Как обычно, если вам нужно делать разделение строки очень часто, вы можете использовать для этого собственную функцию, которую мы создадим с помощью Visual Basic.
В конечном итоге, с помощью Visual Basic, мы получим одну маленькую функцию, которая будет делать все что вам нужно и не придется писать огромные формулы.
Итак, сейчас я продемонстрирую вам как создать две разные функции. Одна будет извлекать из строки только числа, а вторая только текст.
Извлекаем только число из текстовой строки используя Visual Basic
Итак, сейчас мы будем создавать свою собственную функцию для разделения строки на численные значения и текст.
Код Visual Basic:
Function GetNumeric(CellRef As String) Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Then Result = Result & Mid(CellRef, i, 1) Next i GetNumeric = Result End Function
Пошаговая инструкция:
- Щелкните на «Разработчик»;
- Далее — «Visual Basic» (или горячие клавиши ALT + F11);
- В окошке Visual Basic правой кнопкой мышки на ваш лист;
- Далее «Insert» -> «Module»;
- В открывшееся окошко поместите наш код;
- Закройте Visual Basic;
Итак, мы создали функцию для получения всех чисел из текстовой строки и назвали её GetNumeric. Теперь давайте попробуем использовать её.
В результате её выполнения мы получили число из строки текста.
Не забывайте, что на данный момент нам необходимо сохранить файл Excel с соответствующим расширением, так как в нем используется Visual Basic макрос.
Также можно сохранить эту функцию в книгу макросов Excel. Таким образом, её использование будет еще быстрее и удобнее.
Извлекаем только текст из строки используя Visual Basic
А теперь давайте создадим функцию, которая будет получать только текст из строки(без чисел).
Код Visual Basic:
Function GetText(CellRef As String) Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If Not (IsNumeric(Mid(CellRef, i, 1))) Then Result = Result & Mid(CellRef, i, 1) Next i GetText = Result End Function
Пошаговая инструкция:
- Щелкните на «Разработчик»;
- Откройте «Visual Basic»;
- В окошке Visual Basic нажмите правой кнопкой мышки на ваш лист;
- Далее «Insert» -> «Module»;
- И поместите наш код в открывшееся окошко;
- Закройте Visual Basic.
Эта функция будет разделять строку на текст и числа, а после возвращать нам в результате только текст.
Давайте проверим как она работает:
Узнайте Excel как свои пять пальцев на курсе по таблицам от Skillbox
Не забывайте, что на данный момент нам необходимо сохранить файл Excel с соответствующим расширением, так как в нем используется Visual Basic макрос.
Также можно сохранить эту функцию в книгу макросов Excel. Таким образом, её использование будет еще быстрее и удобнее.
Узнайте Excel как свои пять пальцев на курсе по таблицам от Skillbox