在文本值中查找第一个非数字(Microsoft Excel)
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 [查找文本值中的第一个非数字]。