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

Extract numeric portion from an alphanumeric string in Excel 2010

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

我已经尝试了下面在网上找到的公式,但它输出的结果是“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 执行此操作。最好是一些函数而不是宏。

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

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

甚至这个数组公式(在Excel 365中可用):

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

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

基础和老派和长篇大论:

=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函数将字符全部转为小写。它节省了两次替代。小写一次,大写一次。

注意:如果有特殊字符,如 "!@#$%^&*()_+-=[]{}|:";'<>?, ./" 当前公式将保留他们保持原样。需要删除每个特殊字符的替代品。“éìô”等字符也是如此

您似乎只有字母 a 到 f 需要删除。如果是这样的话,这可能比处理所有可能字母的解决方案更快:

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

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

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

按字面意思将文本拆分为单个字符数组,然后检查每个字符是否为数字(即是否可以除以 1)。

如果不是,则该字符是一个空字符串 (""),然后它会在最后将所有内容重新组合在一起。记得输入的时候用Ctrl+Shift+回车

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

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

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))