ブレンダは、値の有効桁数を知ることに関心があります。彼女は、セルに表示されている値の有効桁数を返す、使用できる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

数値の有効数字を識別するための一般的に受け入れられている方法はいくつかありますが、一連のルールを体系化しようとする試みは常に議論の余地があります。このような一連のルールの1つは、ウィキペディアのこの記事の「有効数字の識別」セクションに記載されています。

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

少なくとも基本的な一連のルール(ウィキペディアの記事にあるものなど)を念頭に置いて、値の有効桁数が最も多いユーザー定義関数を開発することができます。

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を指定すると、関数は有効桁の最大数を返します。ほとんどの場合、2つの可能な戻り値は同じですが、値が整数であり、末尾に小数点がなく、末尾にゼロがある場合を除きます。つまり、この関数を使用して数値1234000を評価する場合、最小値(_x_は1)

4を返し、最大値(_x_は2)は7を返します。

この関数は、数値がワークシートにどのように表示されるかを考慮します。つまり、数値のフォーマット方法が重要になります。負の符号、括弧、コンマなどのフォーマット文字をすべて削除します。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(10975)は、Microsoft Excel 97、2000、2002、および2003に適用されます。

Excel(Excel 2007以降)のリボンインターフェイスに関するこのヒントのバージョンは、次の場所にあります: