昨日も書いた通り、セルに「-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に戻ってしまいます。
2008年09月04日
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/18811299
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/18811299
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック