查找有效位数(Microsoft Excel)
布伦达(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 [查找有效位数]。