Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Excel 2010中的字母数字字符串中提取数字部分_Excel_Excel Formula_Numeric_Alphanumeric - Fatal编程技术网

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

从Excel 2010中的字母数字字符串中提取数字部分,excel,excel-formula,numeric,alphanumeric,Excel,Excel Formula,Numeric,Alphanumeric,我想从excel中的字母数字字符串中提取所有数字。我有一张excel表格,上面有如下所示的字母数字字符串列表,我想从字母数字字符串中提取所有数字,并将其存储在一个新的单元格中 我已经尝试了下面的公式,但它输出的结果是“6”,但它是不正确的,所以有人能帮我吗 SUM(MID(0&A2,LARGE(ISNUMBER(-- MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))*ROW(INDIRECT("1:"&LEN(A2))), ROW(INDIR

我想从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完成此操作。更喜欢一些函数而不是宏

使用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中提供的此数组公式:

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

数据在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中提供的此数组公式:


数组公式必须使用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函数将所有字符转换为小写。它省去了做两次替补。一次用于小写,一次用于大写


警告:如果有特殊字符,如!@$%^&*_+-=[]{}|:;'?, ./ 目前的模式将使它们不受影响。需要删除每个特殊字符的替换字符。像ììôetc这样的角色也是一样的

基本的、老派的、冗长的:

=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需要删除。如果是这种情况,这可能比处理所有可能字母的解决方案更快:


=替换替换替换替换替换替换替换替换1、a、b、c、d、e、f、

看起来您只有字母a到f要删除。如果是这种情况,这可能比处理所有可能字母的解决方案更快:


=替换替换替换替换替换替换替换替换1、a、b、c、d、e、f、

以下是使用数组公式的方法:

=CONCAT(IFERROR(MID(A2,ROW(OFFSET($A$1,0,0,LEN(A2),1)),1)/1,""))
逐字将文本拆分为单个字符数组,然后检查每个字符是否为数字,即是否可以除以1

如果不是,则该字符包含一个空字符串,然后在末尾将所有内容重新压缩在一起。记住在输入时使用Ctrl+Shift+Enter


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

以下是使用数组公式的方法:

=CONCAT(IFERROR(MID(A2,ROW(OFFSET($A$1,0,0,LEN(A2),1)),1)/1,""))
逐字将文本拆分为单个字符数组,然后检查每个字符是否为数字,即是否可以除以1

如果不是,则该字符包含一个空字符串,然后在末尾将所有内容重新压缩在一起。记住在输入时使用Ctrl+Shift+Enter


CONCAT和TEXTJOIN在Excel 2010或更早版本中不可用。

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

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(NumbersOnly(A1))

下面是一个UDF,它将使用正则表达式处理这个问题,这通常是处理复杂字符串操作的最快方法。它删除所有不是数字的内容,并将其作为字符串返回

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(NumbersOnly(A1))

我将通过一个用户定义的函数调用Regex函数。请看这篇文章:@FrankBall regex只能与VBA一起使用吗?@FrankBall我刚刚看到最后一行,它说我更愿意在没有宏的情况下使用它。我将通过用户定义的函数来使用regex函数。请看这篇帖子:@FrankBall regex只能与VBA一起使用吗?@FrankBall我刚才在看最后一行,上面写着pre
我觉得不用宏就可以了。很好的一点,唯一的问题是TEXTJOIN函数在Excel 2010中不可用,而且Excel对数字的科学表示法也会有问题。仅供参考,TEXTJOIN在Excel 2013中不可用。很好的一点,唯一的一点是TEXTJOIN函数在Excel 2010中不可用,此外,Excel在数字上的科学表示法也将是一个问题。仅供参考,Excel 2013中不提供TEXTJOIN。看看Excel如何处理看起来像数字的文本,我认为您的解决方案是OP是否希望避免VBA的唯一选择。最后一位假定为数字,但当超过15位时,Excel会将其弄乱。OP注意:如果这些字符总是十六进制的,如给出的示例所示,那么您只需要替换a、b、c、d、e、f,而不需要替换其他字母,如:-、、/、&,,看看Excel如何处理看起来像数字的文本,如果OP想要避免VBA,我认为您的解决方案是唯一的选择。最后一位假定为数字,但当超过15位时,Excel会将其弄乱。OP注意:如果这些字符总是十六进制的,如给出的示例所示,那么您只需要替换a、b、c、d、e、f,而不需要替换其他字母,如:-、、/、&,,