
Excelの時間計算(引き算)の端数処理について教えて下さい。
以下Excelの内容です
セルA1:22:00
セルA2:22:30
セルA3:=A2-A1
※表示形式は"[h]:mm"です。
上記の場合、A3は「0:30」となると思います。
ここまでは良いと思いますが、同じ表示形式でセルA4に「0:30」と手入力し、
セルA3とセルA4をif文で比較すると、一致しない結果となってしまいます。
セルA5:=if(A3=A4,TRUE,FALSE) ⇒結果はFALSE
数式の検証で確認したところ、
セルA3=0.0208333...334
セルA4=0.0208333...333
と、確かに小数点第16位が異なっています。
もっと追いかけるとセルA2の「22:30」に端数が発生しており、整数のセルA1と無限小数のセルA2を引き算を行ったため、丸め誤差によりこのような現象となっているようです。
時間の引き算を行う場合は、時分秒毎に計算し直さなければならないのでしょうか?
または、TEXTで変換やtimevalu等を利用する等の回避策は有るのでしょうか?
時間計算を行う際の鉄則などありましたら、ご教授頂ければと思います。
皆様のお知恵をおかしくださいm(_ _)m
No.2ベストアンサー
- 回答日時:
・方法1
A3とA4セルをTEXT関数で文字列にしてから比較
セルA1:22:00
セルA2:22:30
セルA3:=A2-A1
セルA4:0:30
セルA5:=TEXT(A3,"hh:mm")=TEXT(A4,"hh:mm")
・方法2
「A2-A1」を時刻シリアル値の「0:30」と等しい値にする
セルA1:22:00
セルA2:22:30
セルA3:=VALUE(TEXT(A2-A1),"hh:mm")
セルA4:0:30
セルA5:=A3=A4
・方法3
A3とA4の差が誤差範囲内かどうか調べる
セルA1:22:00
セルA2:22:30
セルA3:=A2-A1
セルA4:0:30
セルA5:=ABS(A3-A4)<1e-16
以下蛇足。
「=IF(条件式,TRUE,FALSE)」と言う式は無駄なので書いてはいけません。
「=IF(A3=12345,TRUE,FALSE)」は「=A3=12345」とだけ書けば済みます。
同様に「=IF(A3<12345,TRUE,FALSE)」は「=A3<12345」とだけ書けば済みます。
chie65535さん、ありがとうございます。
やはり、文字列比較かシリアル値による処理がシンプルな対応ってことですね。
後は誤差が発生しないよう整数化するなど処理を入れるしかないでしょうかね。
比較処理ではチェックを行いたいため、比較処理にロジックを入れる方法3がよさそうですね。
ありがとうございました。
(条件式には実際は処理を書いているので分かり易く(?)書かせていただきました。)
No.1
- 回答日時:
微少数誤差は避けられない問題です。
これは Excelが日付と時間をシリアル値で管理していることに起因します。
(1日を1、1週間を7、12時間を0.5、1時間を 1/24 で管理している)
正直、比較を必要とすることがなければ無視できるほど小さい誤差ですので、普段はそこまで気にする必要はありません。
どうしても気になるのでしたら、HOUR関数 や MINUTE関数を使って時分をそれぞれ整数に直した後に計算でしょうか。
または、時間を1440倍して小数点以下を切り捨てたのちに計算を行い、
計算後にもう一度1440で割ってシリアル値に戻すということも検討してはいかがでしょう。
(24時間=1440分)
Cupperさん、ありがとうございます。
仰るとおり小さい誤差なので見た目上は全く問題はないのですが、
比較した結果によって処理を変えている(色を付けている)ため、
厳密な比較を必要としています。
時間計算処理を入れるという対応は考えてはいましたが、
なんとか関数だけで対応出来ないものかと考えていました。
1440倍するというのも一つの手ですね!
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) 現時点の年齢を算出して、その年齢と一致したセルを色付けしたい。 4 2022/06/23 17:49
- Excel(エクセル) エクセル・セルに数式を入力してセル指定計算 2 2023/04/21 12:46
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Visual Basic(VBA) ExcelVBAの複数指定範囲の構文 2 2022/05/26 22:39
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) エクセルの関数に関しての質問です。 5 2022/10/07 11:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
貼り付けで複数セルに貼り付けたい
-
枠に収まらない文字を非表示に...
-
エクセルで指定したセルのどれ...
-
エクセルの書式設定の表示形式...
-
Excelでのコメント表示位置
-
Excel 例A(1+9) のように番地の...
-
セルをクリック⇒そのセルに入力...
-
(Excel)数字記入セルの数値の後...
-
エクセル オートフィルタで絞...
-
対象セル内(複数)が埋まった...
-
【エクセル】IF関数 Aまたは...
-
数式を残したまま、別のセルに...
-
EXCELのセルの中の半角カンマの...
-
excelの特定のセルの隣のセル指...
-
エクセルの一つのセルに複数の...
-
EXCEL VBA セルに既に入...
-
エクセルで住所と建物名を分け...
-
Excel2003 の『コメント』の編...
-
エクセルのセルの枠を超えて文...
-
Excelで数式内の文字色を一部だ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
スプレッドシートで複数のプル...
-
excelで日付関数の文字列変換の...
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
エクセルの一つのセルに複数の...
-
数式を残したまま、別のセルに...
-
(Excel)数字記入セルの数値の後...
-
Excel 例A(1+9) のように番地の...
-
対象セル内(複数)が埋まった...
-
エクセルの書式設定の表示形式...
-
EXCEL VBA セルに既に入...
-
excelの特定のセルの隣のセル指...
-
エクセルのセルの枠を超えて文...
-
Excelでのコメント表示位置
-
エクセル オートフィルタで絞...
-
Excelで数式内の文字色を一部だ...
おすすめ情報