从Excel 中的字符串中提取数字(使用公式或VBA)

从Excel 中的字符串中提取数字(使用公式或VBA)

Excel 中没有内置函数可以从单元格中的字符串中提取数字(反之亦然– 删除数字部分并从字母数字字符串中提取文本部分)。

但是,这可以使用Excel 函数或一些简单的VBA 代码来完成。

让我先告诉你我在说什么。

假设您有一个如下所示的数据集,并且您想从字符串中提取数字(如下所示):

从Excel 中的字符串中提取数字- 数据

您选择的方法还取决于您使用的Excel 版本:

  • 对于Excel 2016 之前的版本,您需要使用稍长的公式
  • 对于Excel 2016,您可以使用新引入的TEXTJOIN 函数
  • VBA方法可用于所有版本的Excel

从Excel 中的字符串中提取数字(Excel 2016 公式)

此公式仅适用于Excel 2016,因为它使用新引入的TEXTJOIN 函数。

此外,此公式可以提取文本字符串开头、结尾或中间的数字。

请注意,本节中介绍的TEXTJOIN 公式会将所有数字字符放在一起。例如,如果文本是“10 张门票的价格是200 美元”,则结果为10200。

假设您有如下所示的数据集,并且您想从每个单元格中的字符串中提取数字:

下面的公式将为您提供Excel 中字符串的数字部分。

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

从字符串中获取所有数字的公式

这是一个数组公式,因此您需要使用“ Ctrl + Shift + Enter ”而不是使用Enter。

如果文本字符串中没有数字,则此公式将返回空白(空字符串)。

相关问题  最好的恶意软件删除和勒索软件保护

这个公式是如何工作的?

让我打破这个公式并尝试解释它是如何工作的:

  • ROW(INDIRECT(“1:”&LEN(A2))) – 这部分公式将给出从一个开始的一系列数字。公式中的LEN 函数返回字符串中的字符总数。在“成本為 100 美元”的情況下,它將返回 19。因此,公式將變為 ROW(INDIRECT(“1:19”)。然後 ROW 函數將返回一系列數字 – {1;2;3 ;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19}
  • (MID(A2,ROW(INDIRECT(“1:”&LEN(A2))),1)*1) – 这部分公式将返回#VALUE 数组!基于字符串的错误或数字。字符串中的所有文本字符都变为#VALUE!错误和所有数值保持原样。这发生在我们将MID 函数乘以1 时。
  • IFERROR((MID(A2,ROW(INDIRECT(“1:”&LEN(A2))),1)*1),””) – 使用IFERROR 函数时,会删除所有#VALUE!错误,只有数字会保留。这部分的输出看起来像这样– {“”;””;””;””;””;””;””;””;””;””;””;””;””; ””;””;””;1;0;0}
  • =TEXTJOIN(“”,TRUE,IFERROR((MID(A2,ROW(INDIRECT(“1:”&LEN(A2))),1)*1),””)) – TEXTJOIN 函数现在简单地组合字符串字符仍然存在(仅是数字)并忽略空字符串。

专业提示:如果要检查部分公式的输出,请选择单元格,按F2 进入编辑模式,选择要输出的公式部分,然后按F9。您将立即看到结果。然后记得按Control + Z 或按Escape 键。不要按回车键。

您还可以使用相同的逻辑从字母数字字符串中提取文本部分。下面是从字符串中获取文本部分的公式:

=TEXTJOIN("",TRUE,IF(ISERROR(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)*1),MID(A2,ROW(INDIRECT("1:"&LEN) (A2))),1),""))

这个公式的一个小变化是IF函数用于检查我们从MID函数得到的数组是否有错误。如果是错误,则保留该值,否则将其替换为空白。

然后使用TEXTJOIN 来组合所有的文本字符。

注意:虽然这个公式很有效,但它使用了一个volatile 函数(INDIRECT 函数)。这意味着,如果您将其与庞大的数据集一起使用,可能需要一些时间才能为您提供结果。最好在Excel 中使用此公式之前创建备份。

从Excel 中的字符串中提取数字(适用于Excel 2013/2010/2007)

如果您有Excel 2013. 2010. 或2007,则不能使用TEXTJOIN 公式,因此您必须使用复杂的公式来完成此操作。

相关问题  修复Windows 10 蓝牙无法连接到耳机、扬声器等

假设您有一个如下所示的数据集,并且您想要提取每个单元格中字符串中的所有数字。

从Excel 中的字符串中提取数字- 数据

下面的公式将完成此操作:

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

如果文本字符串中没有数字,则此公式将返回空白(空字符串)。

虽然这是一个数组公式,但您不需要使用“Control-Shift-Enter”来使用它。一个简单的输入适用于这个公式。

这个公式的功劳归功于令人惊叹的Excel 先生论坛

同样,无论位置如何,此公式都将提取字符串中的所有数字。例如,如果文本是“10 张门票的价格是200 美元”,则结果为10200。

注意:虽然这个公式很有效,但它使用了一个volatile 函数(INDIRECT 函数)。这意味着,如果您将其与庞大的数据集一起使用,可能需要一些时间才能为您提供结果。最好在Excel 中使用此公式之前创建备份。

使用VBA 在Excel 中分隔文本和数字

如果您经常需要分离文本和数字(或从文本中提取数字),您也可以使用VBA 方法。

您需要做的就是使用简单的VBA 代码在Excel 中创建自定义的用户定义函数(UDF),然后使用该VBA 公式而不是使用冗长而复杂的公式。

让我向您展示如何在VBA 中创建两个公式——一个用于提取数字,一个用于从字符串中提取文本。

从Excel 中的字符串中提取数字(使用VBA)

在这一部分中,我将向您展示如何创建自定义函数以仅从字符串中获取数字部分。

下面是我们将用来创建这个自定义函数的VBA 代码:

Function GetNumeric(CellRef As String) Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Then Result = Result & Mid(CellRef, i, 1) Next i GetNumeric = Result End Function

以下是创建此函数然后在工作表中使用它的步骤:

相关问题  如何在Excel 中插入复选选单(简单的分步指南)

现在,您将能够在工作表中使用GetText 函数。由于我们已经在代码本身中完成了所有繁重的工作,因此您需要做的就是使用公式=GetNumeric(A2)。 

这将立即为您提供字符串的数字部分。

使用自定义VBA 函数仅从Excel 中的字符串中获取数字部分

请注意,由于工作簿现在包含VBA 代码,因此您需要使用.xls 或.xlsm 扩展名保存它。

如果您必须经常使用此公式,您也可以将其保存到您的个人宏工作簿中。这将允许您在您使用的任何Excel 工作簿中使用此自定义公式。

从Excel 中的字符串中提取文本(使用VBA)

在这一部分中,我将向您展示如何创建自定义函数以仅从字符串中获取文本部分。

下面是我们将用来创建这个自定义函数的VBA 代码:

Function GetText(CellRef As String) Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If Not (IsNumeric(Mid(CellRef, i, 1))) Then Result = Result & Mid(CellRef, i, 1) Next i GetText = Result End Function

以下是创建此函数然后在工作表中使用它的步骤:

现在,您将能够在工作表中使用GetNumeric 函数。由于我们已经在代码本身中完成了所有繁重的工作,因此您需要做的就是使用公式=GetText(A2)。

这将立即为您提供字符串的数字部分。

使用自定义VBA 函数仅从Excel 中的字符串中获取文本部分

请注意,由于工作簿现在包含VBA 代码,因此您需要使用.xls 或.xlsm 扩展名保存它。

如果您必须经常使用此公式,您也可以将其保存到您的个人宏工作簿中。这将允许您在您使用的任何Excel 工作簿中使用此自定义公式。

哦,您好 👋很高兴认识你。

订阅我们的电子报,定期发送很棒的科技内到您的邮

发表评论