删除一切,但从单元格中的数字

我有一个Excel工作表,我使用follwoing命令从包含表单文本的单元格获取数字:

=MID(D2;SEARCH("number";D2)+6;13) 

它searchstring“数字”,并获得后面的13个字符。 但有时候结果会比数字更多,因为单元格中的这些文本没有模式,如下例所示:

 62999999990 21999999990 11999999990 6299999993) ( 17999999999) 21914714753) 58741236714 P 18888888820 

我如何避免采取任何事情,但数字或如何删除一切,但从我得到的数字?

您可以使用此用户定义的函数(UDF),将只获取特定单元格中的数字。

码:

 Function only_numbers(strSearch As String) As String Dim i As Integer, tempVal As String For i = 1 To Len(strSearch) If IsNumeric(Mid(strSearch, i, 1)) Then tempVal = tempVal + Mid(strSearch, i, 1) End If Next only_numbers = tempVal End Function 

要使用它,你必须:

  1. 按ALT + F11
  2. 插入新的模块
  3. 在模块窗口中粘贴代码
  4. 现在,您可以在电子表格中使用公式=only_numbers(A1) ,方法是将A1更改为您的数据位置。

示例图片:

  • 在模块窗口插入代码:

在这里输入图像说明

  • 执行该function

在这里输入图像说明

Ps:如果你想把数字的位数分隔到13,你可以把最后一行代码改为:

  only_numbers = tempVal 

  only_numbers = Left(tempVal, 13) 

另外,你可以看看这个主题了解如何实现这个使用公式。

如果你要去用户定义函数(又名UDF),那么执行所有的操作; 不要依赖初步工作表公式将已分解的数字和可能的后缀文本传递给UDF。

在一个标准的代码模块中,

 Function udfJustNumber(str As String, _ Optional delim As String = "number", _ Optional startat As Long = 1, _ Optional digits As Long = 13, _ Optional bCaseSensitive As Boolean = False, _ Optional bNumericReturn As Boolean = True) Dim c As Long udfJustNumber = vbNullString str = Trim(Mid(str, InStr(startat, str, delim, IIf(bCaseSensitive, vbBinaryCompare, vbTextCompare)) + Len(delim), digits)) For c = 1 To Len(str) Select Case Asc(Mid(str, c, 1)) Case 32 'do nothing- skip over Case 48 To 57 If bNumericReturn Then udfJustNumber = Val(udfJustNumber & Mid(str, c, 1)) Else udfJustNumber = udfJustNumber & Mid(str, c, 1) End If Case Else Exit For End Select Next c End Function 

我已经使用你的叙述来添加几个可选参数。 如果情况发生变化,你可以改变这些。 最值得注意的是是否用bNumericReturn选项返回一个真正的数字或文本看起来像一个数字。 请注意,返回的值是右alignment的,因为真实的数字应在以下提供的图像中。

在这里输入图像说明

通过向第六个参数提供FALSE ,返回的内容是文本看起来像一个数字,现在左alignment工作表单元格中。

在这里输入图像说明

如果你不想要VBA,只想使用Excel公式,试试这个:

 =SUMPRODUCT(MID(0&MID(D2,SEARCH("number",D2)+6,13),LARGE(INDEX(ISNUMBER(--MID(MID(D2,SEARCH("number",D2)+6,13),ROW($1:$13),1))* ROW($1:$13),0),ROW($1:$13))+1,1)*10^ROW($1:$13)/10)