仅从文本(字符串)中提取数字

在 Excel 中,您可以使用公式从文本和数字组合的值中提取数字。在以下示例中,我们使用公式从值“TPS1984”中获取 1984。

仅提取数字

从文本中提取数字的公式

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

在本教程中,我们将详细了解这个公式。为了理解它,我们必须将其分为几个部分:

  1. 首先,我们使用 LEN 函数来获取值中的字符数。
    formula-to-extract-numbers-from-a-string
  2. 之后,间接使用使用 1 和 7(由 LEN 返回)的单元格引用。
    indirect-uses-a-cell-reference
  3. 然后 ROW 函数将使用 INDIRECT 并返回一个从 1 开始到 7 结束的数字数组。
    row-function-returns-the-array
  4. 现在,MID 将使用该数组并返回一个新数组,其中包含您引用的单元格的值。
    mid-returns-new-one-with-value
  5. 接下来,我们有一个简单的乘法公式,将数组乘以 1。通过这个简单的乘法,您将得到一个新数组,其中包含#VALUE!文本值和数字的错误将保持不变。
    multiply-the-array
  6. 从这里开始,IFERROR函数会将错误值转换为空值。
    iferror-to-convert-errors-into-blank
  7. 最后,TEXTJOIN 将合并这些值,结果中只有数字。
    extract-numbers-in-older-excel-versions

以上公式仅适用于Excel 2019及以上版本。这是因为我们使用的是 TEXTJOIN,在早期版本中不可用。

如果您想要公式的一部分的值,请选择该部分并按 F9 快捷键。

TEXTJOIN 是一个易失性函数,当您更新工作表中的单元格时,它会更改值。这可能会使您的工作簿有点慢。

但是如果我使用早期版本(2007、2010、2013、2016)怎么办?

如果您使用的是早期版本,则必须使用不同的公式。像这样的公式:

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

上面的两个公式适用于不同类型的值。我通过以下方式进行了测试。

具有不同值的公式

在上面的单元格 A1 中,我们有一个由文本、数字和符号组成的复数值,而结果中只有数字。

获取 Excel 文件

下载

添加评论

您的邮箱地址不会被公开。 必填项已用 * 标注