如何从Excel单元格中只提取数字(7种简单方法)

  • Share This
Hugh West

虽然微软没有提供一个直接的公式或语法来 只提取数字 从Excel单元格中,我们可以将广泛的 Excel公式 在这篇文章中,我们将尝试详细展示和解释如何在几个条件下用适当的公式从单元格中只提取数字或数字。

下载实践工作手册

免费下载我们用来准备这篇文章的练习册。 你可以在选定的单元格中输入带有数字的文本值,并通过嵌入式公式立即找到结果。

从单元格中提取数字.xlsm

从Excel单元格中只提取数字的7种有效方法

这里将有一个VBA代码,一个Excel功能,以及五个实用的公式来帮助你从单元格中提取数字。 就像下面的图片,我们有一些包括数字和字母的代码,其中数字出现在开头。 我们必须只提取这些数字或数字。

1.从文本的开头拉出数字

在这第一个方法中,我们将结合 左边 , 累计 , LEN ,以及 替换 首先,我们将在单元格中输入这个公式,然后,使用 填充手柄 ,我们将把这个公式复制到其他单元格。

步骤。

  • 首先,在单元格中输入公式 C5 .

=LEFT(B5,SUM(LEN(B5)-LEN(SUBSTITUTE(B5,{"0","1","2","3","4","5","6","7","8","9"},""))))

  • 第二,按 进入 然后你会得到第一个代码的数字34。

  • 第三,使用 填充手柄 然后自动填充列中的所有其他单元格 C .

🔎 公式分解

substitute(b5,{"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9″}, "")

  • 在这里, 替换 函数将连续查找数字(0-9),如果找到,它将替换单元格中的该数字 B5 因此,该函数将返回{"34DTXRF"、"34DTXRF"、"34DTXRF"、"4DTXRF"、"3DTXRF"、"34DTXRF"、"34DTXRF"、"34DTXRF"、"34DTXRF"}。

len(substitute(b5,{"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9″},"" )

  • ǞǞǞ LEN 函数决定了一个字符串中的字符数。 因此,在这里, LEN 函数将计算所有在文本中发现的字符,通过 替换 在我们的例子中,结果是{7,7,7,6,6,7,7,7,7}。

len(b5)-len(substitute(b5,{"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9″},"))

  • 现在,这一部分是从单元格的字符数中减去 B5 因此,这里的结果值将是 - {0,0,0,1,1,0,0,0,0}。

sum(len(b5)-len(substitute(b5,{"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9″},") )

  • ǞǞǞ 累计 然后,函数将简单地将所有发现的减去的值与amp相加;因此,结果将在这里。 2 (0+0+0+1+1+0+0+0+0+0).

=left(b5,sum(len(b5)-len(substitute(b5,{"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9″}, ""))))

  • 现在是最后的部分,其中 左边 函数将返回上一节公式中发现的从左边开始的精确数量的值。 由于我们得到的和值是2,所以 左边 函数在这里将只返回 34 从文中看 34DTXRF .

相关的。 如何在Excel中用公式分隔数字(5种方法)

2.从文本的右侧提取数字

在本节中,我们将从文本字符串的右侧提取数字或数码。 我们将使用 权力 , ,以及 搜索 这里的功能。

步骤。

  • 首先,在我们的数据集中,我们要在单元格中输入的是 C5 是-

=RIGHT(B5,LEN(B5)-MIN(SEARCH({0,1,2,3,4,5,6,7,8,9}, B5& "0123456789")) +1)

  • 之后,按 进入 然后使用 填充手柄 来自动填充其余的单元格。

🔎 公式分解

B5& "0123456789″。

  • 在这里,我们要连接在 B5 细胞与 0123456789 通过使用 安培号(&) 在它们之间,我们将得到的结果值为--DTXRF340123456789。

SEARCH({0,1,2,3,4,5,6,7,8,9}, B5&”0123456789″)

  • 现在 搜索 函数将在上一节得到的结果值中逐一搜索所有的数字(0-9),并返回这10个数字在字符中的位置 DTXRF340123456789 因此,这里我们的结果值将是--{8,9,10,6,7,13,14,15,16,17}。

MIN(SEARCH({0,1,2,3,4,5,6,7,8,9}, B5&”0123456789″))

  • ǞǞǞ 函数用于查找数组中的最低位数或数字。 因此,这里的最小值或最低值将是------。 6 从上一节公式中发现的数组{8,9,10,6,7,13,14,15,16,17}。

LEN(B5) - MIN(SEARCH({0,1,2,3,4,5,6,7,8,9}, B5& "0123456789″)) +1)

  • 现在,在的字符数 B5 将被发现由 LEN 然后它将减去数值6(在上一节中找到),然后通过加1返回结果。 在我们的例子中,结果值将是 2 (7-6+1) .

RIGHT(B5,LEN(B5)-MIN(SEARCH({0,1,2,3,4,5,6,7,8,9}, B5& "0123456789″)) +1)

  • ǞǞǞ 权力 函数将从一个字符串的最后或右边返回指定的字符数。 按照上一节中通过减法过程找到的结果,这里的 权力 函数将显示单元格中的最后两个字符 B5 ,而这将是 34 .

阅读更多。 如何在Excel的一个单元格中分隔数字(5种方法)

3.从文本字符串的任何部分提取数字

现在,这里有一个适用于所有情况的广泛解决方案。 这个方法将从文本字符串的任何位置拉出数字或数码。 此外,我们将使用 文本编辑器(TEXTJOIN , 误差(IFERROR , 间接的 , 医学部 ROW 在这个方法中的功能。

步骤。

  • 首先,在你的目标单元格中输入公式,如下所示

=TEXTJOIN("",TRUE,IFERROR((MID(B5,ROW(INDIRECT("1:"&LEN(B5)),1)*1),")

  • 然后,如果你使用的是 Excel 2016 或更高版本,然后按 进入 ,否则按 按Ctrl+Shift+Enter键 来得到这个数组公式的结果。
  • 在这一步之后,自动填充其他单元格,使用 填充手柄 然后你就完成了。

🔎 公式分解

INDIRECT("1:"&LEN(B5))

  • ǞǞǞ 间接的 函数用于存储一个单元格值的数组作为参考文本。 这里的安培号 (&) 命令连接单元格的字符长度为 B5 具有不完整的范围语法 (1:) .
  • 所以,这里的 诱导性 函数将1和字符长度之间的所有数字存储在单元格 B5 作为一个参考文本。

ROW(INDIRECT("1:"&LEN(B5)))

  • ǞǞǞ ROW 函数通常会告诉一个单元格的行号。 但在这里,在 间接的 函数,因为没有提到参考单元格,在这种情况下, ROW 函数将从存储在的参考文本中提取所有数值或数字。 诱导性 功能。
  • 现在,对于第1个单元格 B5 ,通过这些的结果值 ROW 间接的 函数将是--{1;2;3;4;5;6;7;8;9}。

(MID(B5,ROW(INDIRECT("1:"&LEN(B5)),1))

  • ǞǞǞ 医学部 函数将让你确定一个文本字符串中间的字符,给定一个起始位置& 长度。
  • 因此,在这里,对于上一节中发现的所有9个位置,都是 医学部 函数现在将逐一显示每个位置&的所有字符;因此将返回值--{"1″;"9″;" ";"D";"D";"X";"2″;"M";"N"}。

IFERROR((MID(B5,ROW(INDIRECT("1:"&LEN(B5)),1)*1),")

  • 现在 误差(IFERROR 是一个逻辑函数,它将确定一个字符串是数字还是其他东西。 如果它不能识别一个带有数字或数码的字符串,那么它将返回带有定义文本命令的值。
  • 在我们的案例中,所有在最后一节中找到的值都将被乘以1,当结果作为不能被乘以的字母或文本值的值错误返回时,其 误差(IFERROR 因此,我们的结果是--{1;9;"";";";";";";";2;";"}。

=TEXTJOIN("",TRUE,IFERROR((MID(B5,ROW(INDIRECT("1:"&LEN(B5)),1)*1),")

  • 而现在,最后部分将通过以下方式执行 文本编辑器(TEXTJOIN 该函数用于连接两个带有指定分隔符的字符串。
  • 因此,我们在上一节中发现的结果值现在将和这个一起被连接起来 文本编辑器(TEXTJOIN 因此,我们将得到一个数字 192.

阅读更多。 如何在Excel中从字符串中提取多个数字(6种方法)

4.嵌套多个函数,只带出数字

现在,我们将向你展示另一个公式,从Excel单元格的任何位置只提取数字。 虽然它看起来相当复杂,但我们将分解整个公式,并试图轻松解释所有紧凑的功能。 此外,我们将使用 基金会 , 大的 , 索引 , 废物利用 ,以及 身份证号码 这个公式中的函数。

  • 首先,在单元格中输入这个公式 C5 你只需要根据你自己在电子表格中的单元格来替换单元格引用,然后通过嵌入这个公式,你就会马上得到预期的结果。 而且这个公式在任何版本的Excel中都能完美运行。

=IF(SUM(LEN(B5)-LEN(SUBSTITUTE(B5, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&B5, LARGE(INDEX(ISNUMBER(--MID(B5,ROW(INDIRECT("$1:$"&LEN(B5))),1))* ROW(INDIRECT("$1:$"&LEN(B5))),0), ROW(INDIRECT("$1:$"&LEN(B5))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(B5)))/10),"")

  • 之后,你必须按 进入 只有在输入整个公式后,你才能完成。

🔎 公式分解

在开始分解这个庞大的amp; 紧凑的公式之前,我们可以把它分成一些部分,例如

=IF(A>0, SUMPRODUCT(B 1 *C 1 , B 2 *C 2 , ..........B n C n ),"")

这种语法意味着如果 A 大于0,那么所有的乘积 B n C n 如果是这样的话,就会有最终的结果了。 A 不大于0,那么结果将返回一个空或空白单元格。

  • A = sum(len(b5)-len(substitute(b5, {"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9″ }, ""
  • B = MID(0&B5, LARGE(INDEX(ISNUMBER(-MID(B5,ROW(INDIRECT("$1:$"&LEN(B5)),1))*ROW(INDIRECT("$1:$"&LEN(B5))), 0), ROW(INDIRECT("$1:$"&LEN(B5))))+1, 1)
  • C =10^ROW(INDIRECT("$1:$"&LEN(B5)))/10), ""

A部分的细分=SUM(LEN(B5)-LEN(SUBSTITUTE(B5, {"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9″}, ""

substitute(b5, {"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9"}, "")

  • ǞǞǞ 替换 函数将逐一找到文本中的所有数字(0-9)。 19 DDX2MN 每次都是如此,并将在数字的位置上用空字符串替换这些数字。
  • 因此,数组中的结果值将是--{"19 DDX2MN", "9 DDX2MN", "19 DDXMN", "19 DDX2MN", "19 DDX2MN", "19 DDX2MN", "19 DDX2MN", "19 DDX2MN", "1 DDX2MN" }。

len(substitute(b5, {"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9″}, "")

  • ǞǞǞ LEN 现在,该函数将计算从上一节获得的所有字符串值中的字符数。 因此,该函数将返回为- {9,8,8,9,9,9,9,9,8}。

len(b5)-len(substitute(b5, {"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9″ }, "")

  • 现在在公式的这一部分,单元格中的一些字符 B5 结果是{0,1,1,0,0,0,0,1}。

sum(len(b5)-len(substitute(b5, {"0″, "1″, "2″, "3″, "4″, "5″, "6″, "7″, "8″, "9"}, "" ))

  • 借助于 累计 函数,在最后一节找到的数组内的值加起来将是3(0+1+1+0+0+0+1)。
  • 因此,根据我们公式的第一部分。 A>0 (3>0) 现在,我们将进入分解的下一个部分。

B部分的细分=MID(0&B5, LARGE(INDEX(ISNUMBER(-MID(B5,ROW(INDIRECT("$1:$"&LEN(B5)),1))*ROW(INDIRECT("$1:$"&LEN(B5))), 0), ROW(INDIRECT("$1:$"&LEN(B5))))+1, 1)

INDIRECT("$1:$"&LEN(B5))

  • ǞǞǞ 间接的 这里的函数将把字符串值存储为对数组的引用。 在括号内,安培号 (&) 命令将加入在单元格中发现的字符数 B5 这意味着从1到定义的字符数,每一个都将被存储为数组引用。

ROW(INDIRECT("$1:$"&LEN(B5)))

  • 现在,这 ROW 函数将从数组中拉出所有的数字,以及单元格的结果值 B5 将是-{1;2;3;4;5;6;7;8;9}。

MID(B5,ROW(INDIRECT("1:$"&LEN(B5)),1)

  • 在公式的这一部分中, 医学部 函数将表达所有的字符从单元格 B5 所以,提取的值将在这部分之后找到--{"1″; "9″;" "; "D"; "D"; "X"; "2″; "M"; "N"}。

ISNUMBER(-MID(B5,ROW(INDIRECT("1:$"&LEN(B5)),1))

  • 身份证号码(ISNUMBER 是一个逻辑函数,它将单独确定在前面部分找到的值是否是数字字符串。 如果是,那么它将返回为 为真 ,否则,它将显示为 失败 .
  • 因此,在我们的例子中,结果将是--{TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE}。

INDEX(ISNUMBER(-MID(B5,ROW(INDIRECT("$1:$"&LEN(B5)),1))*ROW(INDIRECT("$1:$"&LEN(B5)),0)

  • 如果你注意到在上述函数里面,有一个双韵母,被称为 双单数 它用于将所有的逻辑值转换为数字字符串 1(TRUE) 0(FALSE) .现在, 索引 函数将返回这个结果为- {1;1;0;0;0;0;1;0;0}。
  • 之后,结果值将被乘以从 ROW 函数在数组内,结果将是--{1;2;0;0;0;0;7;0;0}。

LARGE(INDEX(ISNUMBER(-MID(B5,ROW(INDIRECT("$1:$"&LEN(B5)),1))*ROW(INDIRECT("$1:$"&LEN(B5))),0),ROW(INDIRECT("$1:$"&LEN(B5)))))

  • ǞǞǞ 大的 函数现在将按照基于在 "A "中找到的数字的位置重新排列数组中的最大值。 ROW 函数。&;我们这部分公式的结果值将是--{7;2;1;0;0;0;0;0;0}。

MID(0&B5, LARGE(INDEX(ISNUMBER(-MID(B5,ROW(INDIRECT("$1:$"&LEN(B5)),1))*ROW(INDIRECT("$1:$"&LEN(B5)),0), ROW(INDIRECT("$1:$"&LEN(B5))))+1,1)

  • 现在,函数的这一部分将连接 0 与单元格中的文本 B5 然后它将添加 1 单独使用在上一节中发现的所有数字,并显示从 B5 基于定义的数字位置的单元格。
  • 因此,我们这部分的结果将是--{"2″;"9″;"1″;"0″;"0″;"0″;"0″;"0"}。

C部分的细分=(10^ROW(INDIRECT("$1:$"&LEN(B5)))/10),""

  • 这一部分将确定10&的幂,并将其存储在数组内。 幂的数字是指从 ROW 之前的功能。
  • 公式的这一部分将返回值为- {1;10;100;1000;10000;100000;1000000;10000000;100000000}。

B的乘法 n 和C n

  • 现在,来自B和C的最后两个主要分解的结果值现在将在数组内相乘。 然后,从乘法中发现的产品将是--{2;90;100;0;0;0;0;0;0}。
  • 最后是 卫星导航系统(SUMPRODUCT)。 函数将对在数组中发现的这些值进行求和。 因此,我们的最终结果将是 192 (2+90+100+0+0+0+0+0+0) ,这是从单元格中提取的数字 B5 .

阅读更多。 如何在Excel中分隔文本和数字(4种简单方法)

5.从字符串中提取五位数的数字

我们将使用另一个公式从Excel中字符串的任何部分提取五位数的数字。 我们将使用 CONCAT 序列 此外,我们为这个方法稍微改变了我们的数据集。

步骤。

  • 首先,选择单元格区域 C5:C12 .
  • 第二,输入以下公式。

=concat(iferror(0+mid(b5,sequence(len(b5)),1),"" )

  • 最后,按 Ctrl+Enter .

🔎 公式分解

  • LEN(B5)
    • 输出:11 .
    • 该函数返回字符串的长度。
  • SEQUENCE(11)
    • Output: {1;2;3;4;5;6;7;8;9;10;11} .
    • 这个函数返回前11个数字。
  • MID(B5,{1;2;3;4;5;6;7;8;9;10;11},1)
    • 输出:{"1″;"9″;" ";"D";"D";"X";"2″;"M";"N";"3″;"3″}。 .
    • 使用这一部分,我们从字符串中获取单个字符。
  • 0+{"1″;"9″;" ";"D";"D";"X";"2″;"M";"N";"3″;"3″}。
    • 输出:{1;9;#VALUE!;#VALUE!;#VALUE!;#VALUE!;2;#VALUE!;#VALUE!} .
    • 当我们用一个字符串加零时,它将返回一个错误。
  • iferror({1;9;#value!;#value!;#value!;#value!;2;#value!;#value!;3;3},"" )
    • 输出:{1;9;"";";";";";";";2;"";";3;3}。 .
    • 我们得到的所有错误值都是空白。
  • concat({1;9;"";"";";";";";";";";";3;3})
    • 产出:19233 .
    • 最后,我们将所有数值相加,只提取五位数的数字。

6.使用闪光填充来提取某一范围内的数字

使用 闪光填充 与上面提到的其他方法相比,这个特点更容易、更简单。 我们要从文本字符串的任何位置提取数字。 为了正确执行这个方法,我们必须帮助Excel找到一列或一行中单元格值的模式,只对前两个值进行提取。

步骤。

  • 首先,在单元格中手动输入数字 C5 .

  • 然后,从单元格开始输入数字 B6 到细胞 C6 而Excel将自动识别该模式。
  • 最后,按 进入 .

注意事项。 这种方法有一些缺点,这就是为什么不是在所有需要从文本字符串中提取数字的情况下都推荐使用这种方法的原因。 编码方法 闪光填充 通常从一列或一个区域的单元格中遵循一个模式。 因此,前2或3个提取或计算必须手动完成,以帮助Excel吸收结果值的共同模式。 但有时,它不遵循我们需要的确切模式,因此,它会遵循自己的模式,给你一个不匹配的结果。

例如,如果我们要从给定的数据中提取两个零(00),它将只显示一个零,而不是两个。 然后,如果你想从一个单元格的开始或最后位置提取数字,它也会提取文本值,同时提取数字。

阅读更多。 如何在Excel中提取特定文本后的数字(2种合适的方法)

7.应用VBA代码从Excel单元格中只提取数字

如果你有兴趣使用 Excel VBA 宏程序 我们将告诉你如何在单元格中输入代码。 VBA模块 该代码将要求用户指定输入和输出单元格范围。

步骤。

  • 首先,按 ALT+F11 以打开 VBA 窗口。
  • 然后,从 插入 选项卡,选择 模块 一个新的模块窗口将出现,你将在那里输入代码。

  • 第三,在你的模块内,复制后粘贴以下代码。
 Option Explicit Sub ExtractNumbersOnly() Dim CellValue As Range Dim InBx1 As Range Dim InBx2 As Range Dim NumChar As Integer Dim StartChar As Integer Dim XtrNum As String Dim DBxName1 As String Dim DBxName2 As String Dim Iteration As Integer DBxName1 = "输入数据选择" DBxName2 = "输出单元格选择" Set InBx1 = Application.InputBox("文本单元格的输入范围:", _ DBxName1, ", 类型:=8)If TypeName(InBx1) = "Nothing" Then Exit Sub Set InBx2 = Application.InputBox("选择输出单元格:", _ DBxName2, "", Type:=8) If TypeName(InBx2) = "Nothing" Then Exit Sub Iteration = 0 XtrNum = "" For Each CellValue InBx1 Iteration = Iteration + 1 NumChar = Len(CellValue) For StartChar = 1 To NumChar 如果IsNumeric(Mid(CellValue, StartChar, 1) ) Then XtrNum = XtrNum & Mid(CellValue,StartChar, 1) End If Next StartChar InBx2.Item(Iteration) = XtrNum XtrNum = "" Next CellValue End Sub 

  • 之后,按 F5 执行代码。 一个名为""的对话框。 输入数据选择 "将出现。
  • 然后,选择所有文本单元格(即 B5:B12 )并按下 认可 .

  • 之后,另一个名为""的对话框。 输出单元选择 将出现",你必须选择一个特定的单元格或单元格范围来查看输出数据或数值。
  • 最后,选择单元格区域 C5:C12 并按 进入 .

  • 因此,你会一下子看到从文本中提取的数字。 因此,我们将完成从Excel单元格中提取数字的七个快速方法。

🔎 VBA代码分解

声明参数

 Option Explicit Sub ExtractNumbersOnly() Dim cellValue As Range Dim InBx1 As Range Dim InBx2 As Range Dim NumChar As Integer Dim StartChar As Integer Dim XtrNum As String Dim DBxName1 As String Dim DBxName2 As String Dim Iteration As Integer DBxName1 = "输入数据选择" DBxName2 = "输出单元选择" 
  • 在这一部分中,我们首先将所有的参数声明为整数、字符串值或单元格范围。 然后,我们用以下方式给我们的对话框命名 "输入数据选择" "输出单元选择" .

定义输入和输出的类型;对话框的输出

 Set InBx1 = Application.InputBox("Input Range of Text Cells:", _ DBxName1, "", Type:=8) If TypeName(InBx1) = "Nothing" Then Exit Sub Set InBx2 = Application.InputBox("Select Output Cells:", _ DBxName2,", Type:=8) If TypeName(InBx2) = "Nothing" Then Exit Sub Iteration = 0 XtrNum = "" 
  • 现在我们要为对话框定义参数和它们的类型。 这里,添加Type:=8意味着输入和输出数据将由参考单元格或单元格范围组成。
  • 我们也在定义,如果没有找到输入数据,那么子程序将停止。 提到这个宏,子程序不会因为缺少数据而崩溃,而是会停止运行。

结合代码循环内的函数进行迭代

 For Each cellValue InBx1 Iteration = Iteration + 1 NumChar = Len(cellValue) For StartChar = 1 To NumChar If IsNumeric(Mid(cellValue, StartChar, 1)) Then XtrNum = XtrNum & Mid(cellValue, StartChar, 1) End If Next StartChar InBx2.Item(Iteration) = XtrNum XtrNum = "" Next cellValue End Sub 
  • 最后,这是最关键的部分,我们要应用我们需要分配给文本的函数或公式,从字符串中找到结果值。
  • 为Excel编写函数的一个主要优点是,不需要像我们在以前的方法中那样输入一个大的公式,因为VBA有内置的命令,可以使用For或While循环,在这里可以不费吹灰之力地执行对文本字符串中每一个细节的迭代。

阅读更多。 如何在Excel VBA中把数字和文本分开(3种方法)

总结

我们已经向你展示了7种简单的方法,以 只提取数字 从一个文本字符串中只提取数字并不像它看起来那么简单,因为它需要多个函数的组合,这使得最终的公式或语法变得复杂。 但我们希望我们试图通过分解内部函数来说明这些公式,帮助你轻松地理解这些语法。

如果你发现我们应该在这里添加任何其他函数或公式,那么请通过你的宝贵意见让我们知道。 或者你可以看看我们在这个网站上与Excel函数有关的更多信息和有趣的文章。

Hugh West is a highly experienced Excel trainer and analyst with over 10 years of experience in the industry. He holds a Bachelor's degree in Accounting and Finance and a Master's degree in Business Administration. Hugh has a passion for teaching and has developed a unique teaching approach that is easy to follow and understand. His expert knowledge of Excel has helped thousands of students and professionals worldwide improve their skills and excel in their careers. Through his blog, Hugh shares his knowledge with the world, offering free Excel tutorials and online training to help individuals and businesses reach their full potential.