
お世話になります。
15分単位での時給計算を行いたいのですが、15分きっかりの時だけ
下記計算式で出てくる数値が0.25にならず、0.00になってしまいます。
例)
時給千円で、17:00から18:15まで業務したとして、
A1に開始時間、B1に終了時間、C1に勤務時間、
D1に15分単位の値を表示させます。
C1はB1-A1(セルの書式は時刻に設定)、
D1の計算式は
=FLOOR(C1,"00:15:00")/"1:00"
にしています。
上記勤務時間の場合、D1に1.25と出てほしいのですが
1.00になってしまいます。
15分きっかりの場合でも、0.25と表示させる計算式あるいは
設定をお教えいただけたらと思います。
No.4ベストアンサー
- 回答日時:
15分というのは、EXCEL内部では、1/24/60*15の計算値として扱われます。
割り切れない値なので、丸め誤差が生じます。
C1の計算結果は、表示的には、1:15でも、内部的には、1:14:59.99999みたいな値になっているとか、"0:15"の値が、内部的には、0:15.0000000001みたいな値になっている可能性があります。
A1もB1も、入力値は1分単位でしょうから、C1の計算結果も1分単位となりますよね。
D1の計算式の中で、C1の値に1秒足すと、望み通りの結果が得られますよ。
=FLOOR(C1+"0:00:01","0:15")/"1:00"
No.12
- 回答日時:
>手入力と同じ入力にするには別な方法として
B2に0:15と入力、
B3に=B2+"0:15" と式を入力し
B3を下へオートフィル
参考までに。
「B3に=B2+"0:15" と式を入力しB3を下へオートフィル」した場合は、正確には手入力した値と異なりますので注意が必要です。
たとえば、「=手入力のセル=オートフィルのセル」の数式では、すべての値で「TRUE」を返しますが、「=手入力のセル-オートフィルのセル=0」でより正確に大小関係を判定すると、「1:15」や「2:00」のところでは「FALSE」となり、2つの値は同じ値でないことを示しています。
簡単な数式の場合には、上記のようなオートフィルでも大小関係で誤った判定をすることがないのですが、数式内で時間の引き算をするようなケースでは、上記の問題が発生するので注意する必要があります。
No.10
- 回答日時:
補足情報です。
時刻などのデータを連続データとして入力するときにオートフィルすることがよくありますが、この場合にも今回と同じ丸め誤差の問題が発生します。
たとえば、A列に「0:15」「0:30」と入力し、この2つのセルをオートフィルコピーすると15分ごとのデータを作成できますが、実際には15分ごとのデータにはなっていません(30分と15分の差を基準に計算しているため)。
実際、B列に「0:15」「0:30」「0:45」・・・と入力して、C2セルに「=A2=B2」と入力して下方向にオートフィルすると「1:15」「2:00」などでFALSEとなるので同じ値でないことを示しています。
一方、D列に「=A2-B2=0」と同じ意味の数式を入力すると、「1:00」のところではA列とB列は等しいはずなのに、引き算した結果は本当は0ではないことを示しています(正確にはD列の引き算で比較するほうが正しいのですが、数式によってはC列の値結果を基準にしてもOKの場合もある)。
しかし、実際に引き算した結果をE列に計算すると「0」となり、エクセルが誤差を自動的に修正していることがわかります(2進数で表示できない「1時間」を24倍にしたときに「1」となるのと同じようなことが起こっています)。
しかし、「3:15」のようにC列が「TRUE」D列が「FALSE」の組み合わせでも実際に引き算した値が0になっていない場合もあります(誤差が修正できない大きさ?)。
一方、「1:15」のようにどちらの演算結果もFALSEになっているものは実際に引き算した値も0になっていません。
また、2進数で表示できる値、すなわち「1:30」「3:00」「4;30」「6:00」になる部分では、エクセルが自動的に誤差を修正し、オートフィルした場合でも手入力の値と同じ結果になります(整数化した時と同じ)。
以上のように、エクセルが内部的に複雑な修正処理を行っていますので、数式を作成する場合、特に引き算が関与する数式で大小関係を判定するような場合は、この誤差を考慮する必要があります。
これらの誤差に簡便に対応するには、先に回答した微小値での補正か、以下のTEXT関数を使って計算結果の誤差を補正する(手入力と同じ結果にする)方法があります(もちろん整数化で対応することもできますが、数式を変更する必要があるので、簡便ではありません)。
=FLOOR(TEXT(C1,"h:mm")*1,"00:15:00")/"1:00"

No.9
- 回答日時:
追記。
数学的に言えば
(B1-A1)*96
と
B1*96-A1*96
は等しいです。
しかし、残念ながら「(B1-A1)*96とB1*96-A1*96では、誤差の大きさが違う」ので「等しくはない」のです。
例えば
A1⇒17:00
B1⇒18:15
C1⇒=(B1-A1)*96(書式は標準)
D1⇒=B1*96-A1*96(書式は標準)
E1⇒=C1=D1
としてみましょう。
C1とD1が等しいなら、E1には「TRUE」と表示される筈です。しかし結果は「FALSE」です。
なんと「数学的に等しい筈の式が、Excel的(と言うか、コンピュータ的)には等しくない」のです。
どのくらいの誤差があるかは、F1に
=C1-D1
と入力してみると判ります。
F1に
-7.1054273E-15
と表示され「10のマイナス15乗くらいの誤差がある」のが判ります。
No.8
- 回答日時:
Excelで時刻・時間を扱う場合「そのまま足し算や引き算するのは禁物」です。
今回の場合、15分単位ですから「15分が整数になるように、96倍してから計算」しましょう。
C1は「=B1-A1」とします(このC1は誤差を含みます)
D1は「=INT((B1*96)-(A1*96))/4」とします。
D1では「誤差を含んだC1を使用せず、96倍して誤差が出ないようにした数値同士を引き算」します。
また、"1:00"で割ると、それだけで誤差が大きくなるので、4で割ります。
"1:00"で割るのは「1/24」で割る、つまり、24倍するのと同じですから、これは「*24」でも同じです。
元の計算式が「96倍してある」ので「24倍」にする為には「96/24=4」で、結局「/4」になっています。
また「FLOOR(??,"00:15:00")」は「FLOOR(??,1/96)」と同等ですが「1/96で切り捨てすると、誤差で切り捨てし過ぎる」ので「FLOOR(??*96,1)/96」の方が誤差が減ります。
さらに「FLOOR(??,1)」は「INT(??)」と同等です。
元の式から変形を重ねると
FLOOR(??,"00:15:00")/"1:00"
↓
FLOOR(??,"00:15:00")*24
↓
FLOOR(??,1/96)*24
↓
FLOOR(??*96,1)/96*24
↓
INT(??*96)/96*24
↓
INT(??*96)/4
となります。
その結果、D1は
=INT((B1*96)-(A1*96))/4
と言う式になる訳です。
No.6
- 回答日時:
>C1はB1-A1(セルの書式は時刻に設定)、
>D1の計算式は
>=FLOOR(C1,"00:15:00")/"1:00"
>にしています。
小数点以下の数値の計算におけるエクセルの丸め誤差が発生するパターンです。
すなわち、B1とA1の値が2進数で表せない数値の場合、これらを引き算したとき、有効数字以下の桁数部分でちょうど「0:15:00」に相当する数値よりもわずかに小さい値になったとき(わずかに大きい値になる場合は問題ありませんが)、正確には15分未満の値となりますので、今回のように切り捨てられてしまうという問題が発生します。
解決策は、以下のようにC1の部分に微小値を加えて、切り捨て処理するのが簡単です。
=FLOOR(C1+10^-10,"00:15:00")/"1:00"
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) IF関数について教えてください 2 2022/05/10 13:31
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- その他(ビジネス・キャリア) 日報の実務労働時間の集計について困っています。 2 2023/06/09 19:00
- Excel(エクセル) エクセルの関数に関しての質問です。 5 2022/10/07 11:17
- Excel(エクセル) Excel 数式を教えてください 2 2022/06/02 12:24
- Excel(エクセル) Excelについて A1からA12まで、1月〜12月と入力し、 B1からB12の範囲に、C1とD1に 4 2022/05/26 22:48
- Excel(エクセル) エクセルの関数について教えてください。 A1=B1*C1*D1の時 C1D1のセルのどちらかがが空白 1 2022/05/07 23:01
- Excel(エクセル) エクセル関数教えてください 3 2022/06/21 10:22
- Excel(エクセル) 出退勤管理の遅刻・早退時間について 3 2023/08/10 15:33
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルでの時間計算(2時間30分→2.5と表示するには?)
Excel(エクセル)
-
エクセル(EXCEL)で15分単位で加算したい場合
Excel(エクセル)
-
Excelで、15分単位での時給計算<複雑ケース>
Excel(エクセル)
-
-
4
IF関数で、時間を条件にしたい場合の式について
Access(アクセス)
-
5
【0.25での計算】Excelを使用した給料計算の方法について
Excel(エクセル)
-
6
エクセル0:00と表示される原因
Excel(エクセル)
-
7
31:30:00が1900/1/1 7:30:0
その他(Microsoft Office)
-
8
Excelで15分単位の工数表を作るための関数が知りたいです
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
尿検査前日に自慰行為した時の...
-
VLOOKUP関数を使用時、検索する...
-
【Excelで「正弦波」のグラフを...
-
値が入っているときだけ計算結...
-
検便についてです。 便は取れた...
-
EXCELで式からグラフを描くには?
-
彼女のことが好きすぎて彼女の...
-
風俗店へ行く前のご飯
-
ある範囲のセルから任意の値を...
-
2つの数値のうち、数値が小さい...
-
リンク先のファイルを開かなく...
-
イタリアから帰国する際、肉製...
-
エクセルで空白セルを含む列の...
-
小数点以下を繰り上げたものを...
-
MIN関数で空白セルを無視したい...
-
精子に血が・・・
-
Excel 数値の前の「 ' 」を一括...
-
ワードのページ番号をもっと下...
-
値が入っている一番右のセル位...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
イタリアから帰国する際、肉製...
-
2つの数値のうち、数値が小さい...
-
健否~書類の書き方~
-
VLOOKUP関数を使用時、検索する...
-
値が入っているときだけ計算結...
-
小数点以下を繰り上げたものを...
-
エクセルで空白セルを含む列の...
-
EXCELで条件付き書式で空白セル...
-
リンク先のファイルを開かなく...
-
ある範囲のセルから任意の値を...
-
精子に血が・・・
-
エクセルで数式の答えを数値と...
-
風俗店へ行く前のご飯
-
エクセル指定した範囲からラン...
-
一番多く表示のある値(文字列...
-
Excel 数値の前の「 ' 」を一括...
-
ワードのページ番号をもっと下...
-
MIN関数で空白セルを無視したい...
おすすめ情報