我想从excel中的字母数字字符串中提取所有数字。我有一张带有字母数字字符串列表的excel表,如下所示,我想从字母数字字符串中提取所有数字并将其存储在新单元格中
我已经尝试过以下在线查找的公式,但结果输出为'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进行此操作。最好是一些功能而不是宏。
答案 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),""))
数组公式必须使用 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函数将所有字符转换为小写。这样可以节省两次替代工作。一次代表小写字母,一次代表大写字母。
注意:如果有特殊字符,例如“!@#$%^&*()_ +-= [] {} | ::;'<> ?, ./”,则当前公式不变。每个特殊字符的替换都需要删除。“éìô”等字符也是如此
答案 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
进行确认 注意:科学表示法将开始成为一个问题,这就是为什么我使用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))