从随机复杂testingstring中提取10或11位电话号码的公式

我是一个excel公式领域的新手,需要你的帮助一个复杂的公式,我需要从一串随机文本中提取电话号码。 这没有固定的string格式

举例string:

Dring to data add9724516002 add 08107936777 to me pler 8000069633 plz add. Me 9000088106 mujhe bhi add karo dosto 

我已经尝试了许多公式,但似乎没有任何工作。 唯一固定的是数字的长度,它应该是10位或11(包括最初的0)

您可以通过VBA使用RegExp

(这似乎是作为一个公式选项在Excel的某个时间来到Excel,请参阅uservoice

 Function GetCode(strIn As String) As String Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") With objRegex .Pattern = "\d{10,11}\b" If .test(strIn) Then GetCode = .Execute(strIn)(0) Else GetCode = "no match" End If End With End Function 

如果它们看起来像上面提供的string,则可以使用“文本到列”。 假设所有这些string都在A1:A4中。

  1. select全部四个单元格
  2. 数据 – “文本到列”
  3. 分隔
  4. 使用“空格”分隔值

现在,您的电话号码大部分会被抽出,而且看起来像这样:

图像链接

(我在数据上面添加了一行,使每一列都有自己的一组数据。列1,2,3,4,5和6.我还添加了另一列来代替列A,Sort。这将在稍后阶段有用)

接下来,selectA1:G5。

  1. 点击“插入 – 表格”
  2. “我的桌子有标题”

您的范围现在是一个表格,这意味着您可以按升序对数据进行sorting。 我假设你有数百个string,你正在sorting。 当您通过升序sorting,所有数字将首先显示。

在下面的图片中,我已经对实际数据的第一列进行了sorting,并且在顶部可以列出两个电话号码:

图片链接2 如果您想要恢复到您的原始数据arrays,请单击“sorting”列以“升序”

我希望这是避免VBA的一个很好的解决方法。 你可能没有得到所有的电话号码,但可能是一个很好的块。 如果您只需要所有的电话号码,也可以将列C:G复制并粘贴到列A的底部,并一次对所有内容进行sorting。

如果附有数字和字母的string是相似的,则还可以查看RIGHT和LEFT公式以从字母数字string中提取数字