从没有固定格式的随机文本string中提取数字

我想在A1单元格中提取10位数的手机forms的随机string,其中有一些是移动号码,一个是移动号码,另一个是两个,也可能是三个手机号码。所有的手机号码都保存在不同的彩色号码中。只有Excel表单的公式是需要

在这里输入图像说明

首先,你需要创build一个命名范围。 命名范围的目的是规范化和分割数据的空间,使其可以被其他公式读取,而不必每次input。

首先,将数据放在第一行的A列中(如示例数据图所示)。 然后创build一个名称为SplitString的命名范围,并使用以下公式进行定义:

 =INDEX(TRIM(MID(SUBSTITUTE(TRIM(SUBSTITUTE($A1,"."," "))," ",REPT(" ",999)),999*(ROW($1:$10)-1)+1,999)),) 

注意行ROW($1:$10) 。 其中的10是一个猜测,即string永远不会有超过10个条目在单个单元格中进行评估。 这与您的样本数据一致,其中条目最多的单元格是ROHTAK (BUILDER) 7777777777 PAL 6666666666 ,其中有5个条目要评估。 如果您需要增加号码,只需增加10即可。

然后在单元格B1中并上下复制,使用此公式,它使用已定义的名为范围的SplitString

 =IFERROR(IF(AND(ISNUMBER(--$A1),LEN($A1)=10,COLUMN(A1)=1),--$A1,--INDEX(SplitString,MATCH(1,INDEX((COUNTIF($A1:A1,SplitString)=0)*(LEN(SplitString)=10)*(ISNUMBER(--SplitString)),),0))),"") 

Nitin Jain的tigeravatar示例(2)

我会尝试使用这个答案中提到的正则expression式: https : //stackoverflow.com/a/22542835/2068595

在表面上,我会在你的列中寻找这个正则expression式[0-9] {10}(意思是从0到9的10个连续字符)。

在列A中的数据运行这个短的macros:

 Sub numbersss() Dim N As Long, L As Long, K As Long Dim i As Long, j As Long, t As String N = Cells(Rows.Count, "A").End(xlUp).Row For j = 1 To N t = Cells(j, 1).Text L = Len(t) For i = 1 To L If Mid(t, i, 1) Like "[0-9]" Then Else Mid(t, i, 1) = " " End If Next i ary = Split(Application.WorksheetFunction.Trim(t), " ") K = 2 For Each a In ary If Len(a) = 10 Then Cells(j, K) = "'" & a K = K + 1 End If Next a Next j End Sub 

例如:

在这里输入图像说明

如果有人发布纯粹的配方解决scheme,请忽略此帖。