Tony在工作表中有一堆由数字和其他字符组成的数据。例如,他可能有一个包含“ 1234567Blue”的单元格。 Tony希望能够找出出现第一个非数字字符的字符位置。在文本“ 1234567Blue”的示例中,Tony希望通过某种方式来找出第一个非数字字符位于位置8。

有两种获取所需价值的主要方法。首先是使用数组公式来计算位置。在大多数情况下,以下数组公式(使用Ctrl + Shift + Enter输入)将起作用:

=MATCH(TRUE,ISERROR(VALUE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))),0)

该数组公式不起作用的唯一实例是单元格A1为空或包含严格的数值。如果您的列表可能包含此类数据(或根本没有数据),则应考虑使用稍长的数组公式:

=IF(LEN(A1)=0,0,MIN(IF(1ISNUMBER(1MID(A1,ROW(INDIRECT("A1:A"& LEN(A1))),1))=0,ROW(INDIRECT("A1:A"&LEN(A1))),LEN(A1)+1)))* (ISNUMBER(A1)=FALSE)

请记住,这是一个单个数组公式,使用Ctrl + Shift + Enter输入。它将正确处理A1不包含非数字字符的情况(例如在空白单元格或诸如“ 123”的值中)。

下面应返回所需位置的另一个可能的数组公式。这个应该可以处理空单元格,严格来说只能是数字值,但是比以前提供的数组公式短:

=IFERROR(MATCH(1,ISERR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)1)1,),)

当然,找到第一个非数字字符的位置的另一种方法是创建用户定义的函数。有许多不同的方法可以实现这种宏。实现宏的最简单方法之一是简单地逐步传递传递给宏的任何字符。如果找到的字符不在数字的ASCII码范围内(48到57),则说明已找到第一个位置。下面的宏显示了一种执行这种技术的方法:

Function FirstNonDigit(str As String)

Dim iChar As Integer     Dim iPos As Integer     Dim J As Integer

Application.Volatile     iPos = 0     For J = 1 To Len(str)

iChar = Asc(Mid(str, J, 1))

If iChar <= 47 Or iChar >= 58 Then             iPos = J             Exit For         End If     Next J     FirstNonDigit = iPos End Function

要使用该函数,只需在工作表中使用如下公式:

=FirstNonDigit(A1)

如果您引用的单元格为空或仅包含数字,则该函数返回0值。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(10610)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本:

链接:/ excel-Finding_the_First_Non-Digit_in_a_Text_Value [查找文本值中的第一个非数字]。