#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. Комментарий выше относится к удаленному ответу.