从Excel中的字符串中提取数字

时间:2019-03-14 15:52:33

标签: excel vba excel-formula

我想从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)&"0123456789")) + 1)

它将返回123-45-6789


但是当我遇到

这样的示例时
3ES INNOVATION INC                                     12-3456789

该函数将捕获9作为第一个数字,而不是1。

有什么方法可以仅捕获字符串(12-3456789)的右侧并忽略从左侧开始的任何内容,即使它是一个数字?

谢谢!

2 个答案:

答案 0 :(得分: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 :(得分:0)

尝试使用此功能,例如= 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

enter image description here