Заказать макрос
Разрабатываем макросы на заказ. Любой сложности. Быстро и качественно.
Подробнее...

Как найти число в произвольной части текста

Функция ЧИСЛОИЗСТРОКИ позволяет найти и извлечь число, находящееся в текстовой ячейке.

Описание функции

Функция =ЧИСЛОИЗСТРОКИ(ТЕКСТ) извлекает число из текста ячейки. Причем не важно в какой части строки находится число: это может быть как начало или конец строки, так и ее середина.  Функция имеет всего 1 аргумент:

  1. ТЕКСТ - строка или ссылка на ячейку, из которой необходимо извлечь число.

Функция умеет распознавать целые и дробные числа. К примеру, результатом работы по извлечению числа из ячейки, которая содержит текст "Арбузы за 20,5 рублей за кг", будет значение 20,5.

Для работы функции требуется установка надстройки VBA-Excel, после чего она будет добавлена в Excel и будет работает как и любая другая стандартная функция Excel.

Пример

На рисунке далее показаны результаты работы функции в различных случаях.

Пример работы функции

Внимание! Если текст ячейки содержит более одного числа, то функция их сольет воедино. Например, из текста "7 яблок и 3 груши" будет извлечено число 73.

Код на VBA

Function ЧИСЛОИЗСТРОКИ(СТРОКА As String)

    Dim sSymbol As String, sWord As String
    Dim i As Integer

    If СТРОКА = "" Then ЧИСЛОИЗСТРОКИ = "Н/Д": Exit Function
    sWord = "":   sSymbol = ""

    ' Проходим по каждому символу
    For i = 1 To Len(СТРОКА)
        sSymbol = Mid(СТРОКА, i, 1)
        If LCase(sSymbol) Like "*[0-9.,;:-]*" Then
            If LCase(sSymbol) Like "*[.,]*" And i > 1 Then
                If Not Mid(СТРОКА, i - 1, 1) Like "*[0-9]*" Or Not Mid(СТРОКА, i + 1, 1) Like "*[0-9]*" Then
                    sSymbol = ""
                End If
            End If
            sWord = sWord & sSymbol
        End If
    Next
    ЧИСЛОИЗСТРОКИ = sWord
End Function
Надстройка
VBA-Excel
Надстройка для Excel содержит большой набор полезных функций, с помощью которых вы значительно сократите время и увеличите скорость работы с программой.

Комментарии:

comments powered by Disqus