从 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))
我想从 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))