2008年09月04日

「-0」

昨日も書いた通り、セルに「-0」と表示されるケースがあります。
直接セルに「-0」と入力しても、「-」が消えてただの「0」になってしまうので、通常はこういうことはあり得ません。

以下、再現手順です(2007、2003以前のどちらでも同じ手順でOK)。

1.Alt+F11でVisual Basic Editorを開く

2.「挿入」メニュー→「標準モジュール」

3.表示されたウィンドウに次のように入力

Function Test(数値 As Double) As Double
  Test = -数値
End Function

4.Visual Basic Editorを閉じ、Excelのワークシートに「=Test(0)」と入力

以上です。

コード中に2箇所ある「As Double」は、「As Single」や「As Variant」に変えても、あるいは2箇所とも省略してもかまいません(省略は「As Variant」と同じなので)。
変更できるデータ型の種類はその他にもありますが、どちらか一方でも「As Integer」や「As Long」、「As Currency」などに変えると、戻り値はただの「0」になってしまいます。

このことから、この現象は、浮動小数点数の「0」にマイナス符号を付けた際に、一種の演算誤差が発生しているためと考えられます。
上記のFunctionプロシージャの引数をなしにして、処理の部分を「Test = -0#」のように変えても、「=Test()」にはやはり「-0」が返ります。

ただ、これが確認できるのはユーザー定義関数の場合だけで、Subプロシージャの中で-0をDebug.Printしたり、あるいはRangeに代入したりしても、普通の0に戻ってしまいます。
posted by 土屋和人 at 08:32| Comment(0) | TrackBack(0) | Excel
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/18811299
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック