- 締切済み
計算式に関係ないはずなのにエラーが出る?
計算式に関係ないはずなのにエラーが出る? 現在、勤務時間の計算式を作成しているのですが A=9:00、B=0:00、C=9:00という所で A+B-Cという計算式にしたら0になります。 そこで、Dが入力されていなければ空白という IF(D="","",A+B-C)という計算式を入れたらエラー(マイナス)になってしまいました。 時間の計算なので、演算誤差だろうという事はわかるのですが、計算式自体に関係ない関数を入れて エラーが出る理由がわかりません。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- MackyNo1
- ベストアンサー率53% (1521/2850)
>=R2+T2-M2だと、0になるのです。 >=IF(D2="","",R2+T2-M2)だとズレてしまうのです。 >IF文は計算式に全く関係していないのに結果が変わってしまう事、それが理解できないのです。 すでに回答が出ていて、実際に同じセルで数式を変更して試せばわかると思いますが、このエラーはIF文が原因ではなく、2進数で表示できない小数点以下の数字(時間)を演算したときの丸め誤差によるものです(もう一度良く確認してみてください)。 たとえば例示された「9:00」や「0:00」などの数字は2進数で表示できる数字ですので、丸め誤差が出ませんので(少なくとも入力した時間なら)このようなエラーが出ることはないと思います。 一方、「4:00」「1:00」「5:00」の3つのセルを「=A1+B1-C1」のような数式で計算すると、丸め誤差のため正確に0とならないため、時刻の表示形式では負の時間の場合「######」のエラーが表示されることになります(計算結果が実際に「0」でなくても、丸めた結果が0よりもわずかに大きい場合は「0:00」と表示されます)。 今回のケースは計算結果が0になるときだけの問題ですが、小数点以下の数字を演算したときは丸め誤差が出ますので、たとえば時間計算などで時間の大小関係を判定するような場合は、計算結果に微小値を加えるなどの処理をして「以上」ではなく「より大きい」などの条件にするようにしてください。
- mt2008
- ベストアンサー率52% (885/1701)
ANo.1です 補足ですが、演算に関係ないIF文を入れた事でおかしくなったのではなく、R2、T2、M2セルの値が、見た目と実際の値が浮動小数の為に少し異なっているためです。例:見た目 9:00:00 実際 8:59:59.9 単に =R2+T2-M2 でも同じ結果になると思います。
- mt2008
- ベストアンサー率52% (885/1701)
ANo.1です、 式を↓にするとどうでしょう。 =IF(B2="","",TEXT(R2,"hh:mm:ss")+TEXT(T2,"hh:mm:ss")-TEXT(M2,"hh:mm:ss")) また、結果がマイナスになる可能性があるのでしたら[ツール]-[オプション]の「計算方法」で、「1904年から計算する」にチェックを付けてください。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 時間計算などの場合によくある「浮動小数」の関係だと思います。 数式を IF(D="","",ROUND(A+B-C,5) のようにしてみてはどうでしょうか? 以上、お役に立てば良いのですが ダメならごめんなさいね。m(__)m
補足
返答ありがとうございます。 エラー自体は無くなりました。(また別なところでエラーが出てきましたが・・・) ただ、計算に全く関係していないIF文を入れただけで、計算結果が変わってしまう、という理由が 分からなかったのです。 宜しければそちらの返答もお願い致します。
- 2kaku34
- ベストアンサー率30% (101/329)
書式設定を確認して下さい。Ctrl+1(いち、アイではない)。 Excel ショートカットキー一覧(結構便利です) http://www.relief.jp/itnote/archives/000099.php
補足
書式設定は 時刻 13:30 です。
- mt2008
- ベストアンサー率52% (885/1701)
Excelの話でしょうか? そうでしたら、エラーとなる式や関係セルを省略せずに提示してください。 また、結果も「エラー(マイナス)」では、判りません。 実際に出た物を提示してください。
補足
問題のセル =R2+T2-M2 から =IF(B2="","",R2+T2-M2) に修正すると 0から########になります。 標準書式だと-3.33067E-16になります。 B2=6/22等の日付です。 R2=IF(D2>=TIME(22,0,0),TIME(0,0,0),IF(D2<=TIME(5,0,0),E2-TIME(5,0,0),TIME(22,0,0)-D2)) T2=IF(E2<=(TIME(5,0,0)+1),TIME(0,0,0),E2-(TIME(5,0,0)+1)) M2=IF(B2="","",IF(Q2>0,IF(R2<=TIME(9,0,0),TIME(9,0,0)-Q2,R2-Q2),IF(R2>=TIME(9,0,0),TIME(9,0,0),R2))) 式の結果としては R2=9:00 T2=0:00 M2=9:00 です。 全ての関係セルの式を入れるとものすごく多くなってしまいますので 直接関係がないセルは省略させて頂きます。
補足
返答ありがとうございます。 =R2+T2-M2だと、0になるのです。 =IF(D2="","",R2+T2-M2)だとズレてしまうのです。 IF文は計算式に全く関係していないのに結果が変わってしまう事、それが理解できないのです。