布伦达(Brenda)有兴趣知道值中的有效位数。她想知道是否可以使用Excel函数或公式来返回单元格中显示的值中的有效数字位数。

这个问题并不像看起来那么简单。对于某些人,找到一个值中的位数,再减去小数点或负号。

如果您只需要这些,那么类似以下公式的内容就可以正常工作:

=IF(A1<0,IF(A1=INT(A1),LEN(A1)-1,LEN(A1)-2),IF(INT(A1)=A1,LEN(A1),LEN(A1)-1))

但是,之所以如此简单,是因为构成值中有效数字位数的因素取决于许多因素。底线是,您无法始终通过查看一个值来知道它有多少个有效数字。

例如,值100可以具有1、2或3个有效数字。假定值1.00具有3个有效数字,但是如果显示的值是Excel施加格式设置的结果,则可能不是这种情况—例如,单元格中的值可能是1.0000437,Excel将该格式设置为1.00。您可以在此处找到有关有效数字主题的更多信息:

http://excel.tips.net/T001983

有一些公认的方法可以识别数字中的有效数字,但是任何试图将一组规则编成代码的尝试始终值得商debate。 Wikipedia在本文的“识别重要数字”部分中已指出了这样的一组规则:

http://en.wikipedia.org/wiki/Significant_figures

至少要记住一套基本的规则(例如Wikipedia文章中的规则),才能开发一个用户定义的函数,该函数将为您提供一个值的最大可能有效数字位数。

Function SigFigs(rng As Range, Optional iType As Integer = 1)

'iType = 1 is Min     'iType = 2 is Max

Dim rCell As Range     Dim sText As String     Dim sText2 As String     Dim iMax As Integer     Dim iMin As Integer     Dim iDec As Integer     Dim i As Integer

Application.Volatile     Set rCell = rng.Cells(1)



'if not a number then error     If Not IsNumeric(rCell) Or IsDate(rCell) Then         SigFigs = CVErr(xlErrNum)

Exit Function     End If

sText2 = Trim(rCell.Text)

sText = ""

'find position of decimal point (it matters)

iDec = InStr(sText2, ".")



'strip out any non-numbers (including decimal point)

For i = 1 To Len(sText2)

If Mid(sText2, i, 1) >= "0" And _         Mid(sText2, i, 1) <= "9" Then _         sText = sText & Mid(sText2, i, 1)

Next

'remove any leading zeroes (they don't matter)

While Left(sText, 1) = "0"

sText = Mid(sText, 2)

Wend     iMax = Len(sText)



'strip trailing zeroes (they don't matter if no decimal point)

sText2 = sText     If iDec = 0 Then         While Right(sText2, 1) = "0"

sText2 = Left(sText2, Len(sText2) - 1)

Wend     End If     iMin = Len(sText2)



'return Min or Max     Select Case iType         Case 1             SigFigs = iMin         Case 2             SigFigs = iMax         Case Else             SigFigs = CVErr(xlErrNum)

End Select End Function

您可以通过在工作表中使用以下命令来调用此函数:

=SigFigs(A1, x)

您可以将_x_替换为1或2。如果指定1,则该函数将返回最小有效数字位数。如果指定2,则该函数将返回最大有效位数。在大多数情况下,两个可能的返回值将是相同的,除了整数值(不带尾随小数点)且具有尾随零之外。换句话说,如果使用该函数求值1234000,则最小值(_x_为1)

返回4,最大值(_x_为2)返回7。

该功能考虑了数字在工作表中的显示方式,这意味着数字的格式设置很重要。它会删除所有格式字符,例如负号,括号和逗号。

注意:

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

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

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

本技巧(10975)适用于Microsoft Excel 97、2000、2002和2003。您可以在以下位置找到用于Excel功能区界面(Excel 2007及更高版本)的本技巧的版本:

链接:/ excelribbon-Finding_the_Number_of_Significant_Digits [查找有效位数]。