从Excel 2010中的字母数字字符串中提取数字部分

时间:2019-04-16 03:56:13

标签: excel excel-formula numeric alphanumeric

我想从excel中的字母数字字符串中提取所有数字。我有一张带有字母数字字符串列表的excel表,如下所示,我想从字母数字字符串中提取所有数字并将其存储在新单元格中

enter image description here

我已经尝试过以下在线查找的公式,但结果输出为'6',但这是不正确的,因此有人可以帮助我吗?

SUM(MID(0&A2,LARGE(ISNUMBER(-- 
MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))*ROW(INDIRECT("1:"&LEN(A2))),
ROW(INDIRECT("1:"&LEN(A2))))+1,1)*10^ROW(INDIRECT("1:"&LEN(A2)))/10)

我期望该字符串的输出:

eed1e11bd1a66cb47ad8b215c882194cdf964332484d20c56aea69e6e5196f67

成为:

1111664782158821949643324842056696519667

请注意,我只希望通过Excel进行此操作。最好是一些功能而不是宏。

6 个答案:

答案 0 :(得分:2)

A1 中使用数据,在 B1 中输入数组公式:

=MID(SUMPRODUCT(--MID("01"&A1,SMALL((ROW($1:$300)-1)*ISNUMBER(-MID("01"&A1,ROW($1:$300),1)),ROW($1:$300))+1,1),10^(300-ROW($1:$300))),2,300)

或什至此数组公式(在Excel 365中可用)

=TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)),MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),""))

enter image description here

数组公式必须使用 Ctrl + Shift + Enter 输入,而不仅仅是 Enter 键。如果正确完成此操作,则公式将显示在公式栏中,并带有大括号。

答案 1 :(得分:1)

上小学和老学校,long不休:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LOWER(A2),"a",""),"b",""),"c",""),"d",""),"e",""),"f",""),"g",""),"h",""),"i",""),"j",""),"k",""),"l",""),"m",""),"n",""),"o",""),"p",""),"q",""),"r",""),"s",""),"t",""),"u",""),"v",""),"w",""),"x",""),"y",""),"z","")

基本上,它将遍历并查找字母的每个字符,并将其替换为“”。它将保留为字符串以显示前导零。如果您希望将其作为一个数字,则不会显示前导零,并且您需要通过不会更改其值的数学运算来发送字符串,例如:

--
+0
-0
*1
/1

LOWER函数将所有字符转换为小写。这样可以节省两次替代工作。一次代表小写字母,一次代表大写字母。

POC

注意:如果有特殊字符,例如“!@#$%^&*()_ +-= [] {} | ::;'<> ?, ./”,则当前公式不变。每个特殊字符的替换都需要删除。“éìô”等字符也是如此

答案 2 :(得分:0)

似乎您只删除了字母a至f。如果是这种情况,这可能比处理所有可能字母的解决方案要快:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"a",""),"b",""),"c",""),"d",""),"e",""),"f","")

答案 3 :(得分:0)

这是另一个公式选项:

{=TEXT(NPV(-0.9,,IF(ISERR(MID(A1,256-COLUMN(A:IV),1)%),"",MID(A1,256-COLUMN(A:IV),1)%)),"0")}

请注意,这是一个数组公式,应通过 Ctrl Shift Enter

进行确认

enter image description here

注意:科学表示法将开始成为一个问题,这就是为什么我使用TEXT()的原因,但是Excel在数字上令人讨厌的行为仍会开始干扰第15个字符的输出并具有四舍五入的问题或输出为0

我在想防止这种情况的最明智的做法是使用UDF?还是走老派的路(@ForwardEd他的答案)

一些简单的UDF可能看起来像:

Public Function GetDigits(RNG As String) As String

GetDigits = RNG
For X = 97 To 122
    GetDigits = Replace(GetDigits, Chr(X), "")
Next X

End Function

或使用正则表达式,例如:

Public Function GetDigits(RNG As String) As String

With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "\D"
    GetDigits= .Replace(RNG, "")
End With

End Function

答案 4 :(得分:0)

这是使用数组公式的方法:

=CONCAT(IFERROR(MID(A2,ROW(OFFSET($A$1,0,0,LEN(A2),1)),1)/1,""))

从字面上将文本拆分为一个单字符数组,然后检查每个字符是否都是数字(即可以将其除以1)。

如果不是,则该字符带有一个空字符串(""),然后在末尾再次将所有内容压缩在一起。切记在插入时使用 Ctrl + Shift + Enter

({CONCAT,例如TEXTJOIN在Excel 2010或更早版本中不可用。)

答案 5 :(得分:0)

这是一个UDF,它将使用REGEX(通常是处理复杂的字符串操作的最快方法)来处理此问题。它删除所有不是数字的内容,并将其作为字符串返回。

Function NumbersOnly(rng As Range)
 Dim nReturn As Variant
 With CreateObject("VBScript.RegExp")
        .Pattern = "[^0-9]"
        .MultiLine = True
        .Global = True
        nReturn = .Replace(rng.Value2, vbNullString)
    End With
    NumbersOnly = nReturn
End Function

如果需要数字,只需将函数包装在“ VALUE”函数中即可。

=VALUE(NumbersOnly(A1))