Извлечение чисел из строки в Excel

#excel #vba #excel-formula

#excel #vba #excel-формула

Вопрос:

Я хочу извлечь серию чисел из строки в Excel.

 ZERINER JERNIGAN                                       123-45-6789
  

Формула, которую я использовал:

 right(trim(A1), len(trim(A1)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},trim(A1)amp;"0123456789"))   1)
  

которые он вернет 123-45-6789


Но когда я сталкиваюсь с примером, подобным

 3ES INNOVATION INC                                     12-3456789
  

Функция будет записывать 9 в качестве первого числа вместо 1.

Есть ли какой-либо способ захватить только правую часть строки ( 12-3456789 ) и игнорировать все, что начинается слева, даже если это цифра?

Спасибо!

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

1. Были бы вы открыты для использования vba? Если да, то это довольно просто

2. Да, я открыт для VBA

3. Я удалил свой ответ, потому что либо неправильно истолковал ваш вопрос, либо вы изменили его. Что, если ваша строка будет чем-то вроде «423AB 97» — вы бы просто хотели 97?

4. Да, правильно. итак, в этом случае 3ES INNOVATION INC 98-0485843 я бы просто хотел 98-0485843

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

Ответ №1:

Например, в B1 используется:

 =TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",255)),255))
  

Проверьте, есть ли числа:

 =COUNT(FIND({0,1,2,3,4,5,6,7,8,9},A1))>0
  

Объедините два в IF:

 =IF(COUNT(FIND({0,1,2,3,4,5,6,7,8,9},TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",255)),255))))>0,TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",255)),255)),"")
  

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

1. один вопрос — если текст «T GRANT ANDERSON» и в конце нет цифр, что я должен изменить в текущей функции, чтобы убедиться, что она ничего не возвращает?

Ответ №2:

Попробуйте эту функцию, например =FNumbers(A1) или =FNumbers («3ES INNOVATION INC 98-0485843»).

Я не уверен, что все возможности были перечислены. Я предположил, как предполагает Rawrplus, что существует по крайней мере пробел, отделяющий числа в начале от последующих.

 Function FNumber(s As String) As String

With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = ".s(d -*d )"
    If .Test(s) Then FNumber = .Execute(s)(0).submatches(0)
End With

End Function
  

введите описание изображения здесь

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

1. Возвращает 9! Итак, чтобы показать оставшуюся часть числа, я просто ввожу очень большое число для num_chars, например MID (MID(A1,2,500),MIN(FIND({0,1,2,3,4,5,6,7,8,9},MID (A1,2,500)amp;»0123456789″)),50) в итоге?

2. Комментарий выше относится к удаленному ответу.