重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

A1とB1に 「0:30」が入っています。それぞれ別の集計方法で出た数字です。

しかし、A1=B1 で Falseという結果が出ました。

シリアル値を確認すると以下のように相違するのが確認できました。

A1:0.0208333333333333
B1:0.0208333333333334

末尾の3と4の違いは何でしょうか?
また時刻形式などシリアル値を理解してない人にも伝わる形で、同一でないことを示せる表示形式などないでしょうか?
例えば、秒の桁数を増やすとか。

同一時刻であることをTRUEにてチェックしたいのにFALSEが出ると困るので、TRUEになるための関数などでの加工はできないでしょうか?
Excelでなく手動で計算するといずれも「0時間30分」なので結論は同一ですが、
Excelの都合上、相違してしまっているのは分かりますが、実際の時間計算上狂わさせずに同一にまるめたいです。

A 回答 (12件中11~12件)

こんにちは



>末尾の3と4の違いは何でしょうか?
コンピュータによる計算の場合、有効桁数に限りがある関係から、計算の順序や方法によって微小誤差が発生することがあり得ます。

シリアル値は1日を1として換算してしているので、例えば1時間は1/24です。
理論上は、1/24=0.0416666666666666・・と循環小数になるはずですが、1:00:00 のシリアル値は 0.0416666666666667 のように丸められています。
これはエクセルの有効桁数が15桁であるという制限によるものです。

1秒は 1/24/60/60≒ 0.0000115740740740741 に当たりますので、上記の有効桁数があれば秒単位で表示した場合に誤差はまず出ないと考えられますが、計算で求めた値の場合には、実際の値(=シリアル値)の末尾に誤差が含まれることがあり得ます。

>A1=B1 で Falseという結果が出ました。
A1=B1 は値が「全く同じであるか」を評価するので、上記の誤差が含まれているような場合には「同じではない」と判定されることになります。


>TRUEになるための関数などでの加工はできないでしょうか?
1秒単位での時刻という前提で考えても良いのであれば、計算結果を1秒単位で丸めておけば、セルが同じ時刻表示であれば、同じ値と判定されるようになります。

具体的には、A1セルに現在入っている計算式を「A1計算式」とするなら、
 =MROUND(A1計算式,"0:0:1")
のようにしておくことで、1秒単位に丸めることが可能です。
B1セルも同様にしておけば、
 A1=B1
の結果はTRUEとなるでしょう。

あるいは、A1、B1セルは現状のままにしておいて、比較する際に
 MROUND(A1,"0:0:1")=MROUND(B1,"0:0:1")
のようにして比較すれば、TRUEの結果を得ることが可能です。
    • good
    • 1
この回答へのお礼

ありがとうございます。なるほど、よく分かりました。
MROUNDも知れて勉強になりました。

MROUND(A1,"0:0:1") → TEXT(A1,"hh:mm:ss") でも良いかなと思いましたが、私の見落としや懸念点ありますでしょうか?

お礼日時:2024/09/04 17:11

もっとスマートな方法があるのかもしれませんが、とりあえず



A2 =VALUE(TEXT(A1,"hh:mm:ss"))
B2 =VALUE(TEXT(B1,"hh:mm:ss"))
    • good
    • 0
この回答へのお礼

ありがとう

お礼日時:2024/09/04 17:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!