以下の構文で出社時間をC4に退社時間をD4に入力し、設定されて居る休憩時間差引した結果をアウトプットさせたいのですが、退社時間が23時59分までは正常に計算するのですが、24時以降の数値を入力ると単に=D4-C4と同じ結果が表示されます。各セルの表示設定は[h]:mmとして24時以降の入力に対応しています。
どなたかお解りになる方いらっしゃれば教えてください。
よろしくお願いいたします。
********以下記載している構文です。
=IF(D4<>"",D4-C4
-IF(OR(TEXT(C4,"hh:mm")>="10:15",TEXT(D4,"hh:mm")<="10:00"),"0:00",IF(TEXT(D4,"hh:mm")>="10:15","10:15",TEXT(D4,"hh:mm"))-IF(TEXT(C4,"hh:mm")<="10:00","10:00",TEXT(C4,"hh:mm")))
-IF(OR(TEXT(C4,"hh:mm")>="13:00",TEXT(D4,"hh:mm")<="12:00"),"0:00",IF(TEXT(D4,"hh:mm")>="13:00","13:00",TEXT(D4,"hh:mm"))-IF(TEXT(C4,"hh:mm")<="12:00","12:00",TEXT(C4,"hh:mm")))
-IF(OR(TEXT(C4,"hh:mm")>="15:15",TEXT(D4,"hh:mm")<="15:00"),"0:00",IF(TEXT(D4,"hh:mm")>="15:15","15:15",TEXT(D4,"hh:mm"))-IF(TEXT(C4,"hh:mm")<="15:00","15:00",TEXT(C4,"hh:mm")))
-IF(OR(TEXT(C4,"hh:mm")>="18:30",TEXT(D4,"hh:mm")<="18:00"),"0:00",IF(TEXT(D4,"hh:mm")>="18:30","18:30",TEXT(D4,"hh:mm"))-IF(TEXT(C4,"hh:mm")<="18:00","18:00",TEXT(C4,"hh:mm")))
-IF(OR(TEXT(C4,"hh:mm")>="22:00",TEXT(D4,"hh:mm")<="21:30"),"0:00",IF(TEXT(D4,"hh:mm")>="22:00","22:00",TEXT(D4,"hh:mm"))-IF(TEXT(C4,"hh:mm")<="21:30","21:30",TEXT(C4,"hh:mm")))
-IF(OR(TEXT(C4,"hh:mm")>="25:30",TEXT(D4,"hh:mm")<="25:00"),"0:00",IF(TEXT(D4,"hh:mm")>="25:30","25:30",TEXT(D4,"hh:mm"))-IF(TEXT(C4,"hh:mm")<="25:00","25:00",TEXT(C4,"hh:mm")))
-IF(OR(TEXT(C4,"hh:mm")>="29:00",TEXT(D4,"hh:mm")<="28:30"),"0:00",IF(TEXT(D4,"hh:mm")>="29:00","29:00",TEXT(D4,"hh:mm"))-IF(TEXT(C4,"hh:mm")<="28:30","28:30",TEXT(C4,"hh:mm")))
-IF(OR(TEXT(C4,"hh:mm")>="33:00",TEXT(D4,"hh:mm")<="32:00"),"0:00",IF(TEXT(D4,"hh:mm")>="33:00","33:00",TEXT(D4,"hh:mm"))-IF(TEXT(C4,"hh:mm")<="32:00","32:00",TEXT(C4,"hh:mm"))),"")
No.2ベストアンサー
- 回答日時:
No1の方の方法なら、
[h]:mmでなく、[hh]:mmとしてください。
本件の不具合は、文字列で時刻の大小を判断しているのが原因です。
"hh:mm"の場合は、C4=24:00を TEXT(C4,"hh:mm)で変換すると"00:00"になり、"24:00"の文字列が
作れません。従って、24時間を超えると、不具合が発生します。
"[h]:mm"の場合は、C4=9:00を TEXT(C4,"[h]:mm")で変換すると、"9:00"になります。
これで、"24:00"と比較すると、"9:00"のほうが大きくなります。
TEXT(C4,"[hh]:mm")の場合は、両者の上記の欠点をきれいに解消できます。
しかしながら、本来は、時刻の比較は、時刻同士で比較すべきであり、文字列で比較すべきではありません。
C4と"24:00"を比較するなら、
IF(C4>=TIMEVALUE("24:00"),xx,yy)のようにすべきです。
あなたの式をTIMEVALUEで比較するように変えたものが、以下の式になります。
=IF(D4<>"",D4-C4
-IF(OR(C4>=TIMEVALUE("10:15"),D4<=TIMEVALUE("10:00")),"0:00",IF(D4>=TIMEVALUE("10:15"),"10:15",D4)-IF(C4<=TIMEVALUE("10:00"),"10:00",C4))
-IF(OR(C4>=TIMEVALUE("13:00"),D4<=TIMEVALUE("12:00")),"0:00",IF(D4>=TIMEVALUE("13:00"),"13:00",D4)-IF(C4<=TIMEVALUE("12:00"),"12:00",C4))
-IF(OR(C4>=TIMEVALUE("15:15"),D4<=TIMEVALUE("15:00")),"0:00",IF(D4>=TIMEVALUE("15:15"),"15:15",D4)-IF(C4<=TIMEVALUE("15:00"),"15:00",C4))
-IF(OR(C4>=TIMEVALUE("18:30"),D4<=TIMEVALUE("18:00")),"0:00",IF(D4>=TIMEVALUE("18:30"),"18:30",D4)-IF(C4<=TIMEVALUE("18:00"),"18:00",C4))
-IF(OR(C4>=TIMEVALUE("22:00"),D4<=TIMEVALUE("21:30")),"0:00",IF(D4>=TIMEVALUE("22:00"),"22:00",D4)-IF(C4<=TIMEVALUE("21:30"),"21:30",C4))
-IF(OR(C4>=TIMEVALUE("25:30"),D4<=TIMEVALUE("25:00")),"0:00",IF(D4>=TIMEVALUE("25:30"),"25:30",D4)-IF(C4<=TIMEVALUE("25:00"),"25:00",C4))
-IF(OR(C4>=TIMEVALUE("29:00"),D4<=TIMEVALUE("28:30")),"0:00",IF(D4>=TIMEVALUE("29:00"),"29:00",D4)-IF(C4<=TIMEVALUE("28:30"),"28:30",C4))
-IF(OR(C4>=TIMEVALUE("33:00"),D4<=TIMEVALUE("32:00")),"0:00",IF(D4>=TIMEVALUE("33:00"),"33:00",D4)-IF(C4<=TIMEVALUE("32:00"),"32:00",C4)),"")
添付の図にそれぞれの結果が表示されていますので、参考にしてください。
お礼
tatsu99さま
ご教授いただきましてありがとうございました。
TIMEVALUEコマンドと使うと云うことは全く分かりませんでした。
頂きましたご回答で全て解決致しました。
本当に有難うございます。なんと感謝申し上げてよろしいか。。。
重ねてお礼申し上げます。
また今後共よろしくお願い申し上げます。
No.1
- 回答日時:
"24:10"-"17:15"
が正しい結果を返さない…と言う事でしょうか。
・・・まあ良いでしょう。気になった点・・・
計算式の中で使っているTEXT関数で、書式に"hh:mm"が使われている。
ここで24時間で割った余りだけが数値として扱われることが原因と予想してみる。
"[h]:mm"にして結果を確認してみてください。
・・・余談・・・
"hh:mm"を"[h]:mm"へは置換で一発変換可能です。
ご回答ありがとうございます。
「24時以降の数値を入力ると単に=D4-C4と同じ結果が表示されます」では、分かりませんよね、、すみません。
例えば
C4の出社時間に9:00
D4の退社時間に23:59
を入力したときの結果は12:29ですが、
C4の出社時間に9:00
D4の退社時間に24:00
を入力したときの結果では1分しか変わらないはずなのですが、15:00となってしまいます。
ちなみに、残念ながら"[h]:mm"にしてみたのですが、結果は変わりませんでした。
お手数をおかけしてすみません。よろしければご教授頂ければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(パソコン・スマホ・電化製品) pthonのframeに演算結果(数値)を表示したい 1 2023/06/05 22:08
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) テーブルを配列に入れて、元のテーブルの行番号を取得したい 1 2022/08/16 20:15
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- Visual Basic(VBA) vba シートコピーの不具合 1 2022/06/25 17:48
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL Server で 翌月10日を取...
-
日付型カラムへのデータINSERT
-
SQL Sever での日付の差の求め...
-
PL/SQLにて勤務時間の計算
-
SQLエラーについて
-
エクセル上の 2017/10/27 7:01...
-
日付範囲を展開したレコードを...
-
Access VBAで行ラベルが定義さ...
-
Accessのマクロでモジュールを...
-
Accessの数値から時間に変換す...
-
Google Apps Script、onChange...
-
yyyy/M/dをyyyy/MM/ddに変換
-
ODBCリンクの際にACCESSでは読...
-
キャッシュを使わずにSELECTを...
-
エクセルVBA 今日の日付行...
-
Statement ignored というエラー
-
今日の日付が入った行のデータ...
-
日付型なら変数の先頭になん...
-
フォーム上で小計など自動計算...
-
或るプロシージャの呼び出し元判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL*Loaderでのsysdate使用
-
SQL*PLUSでの分秒までの表示の仕方
-
SQL*Loader フォーマット変換...
-
ALTER SESSIONについて
-
DB2でのシステム日付のinsert、...
-
日付型カラムへのデータINSERT
-
SQL Server で 翌月10日を取...
-
SQLです。下記の問合せを行うク...
-
to_date使用時に発生するエラー...
-
date型のインデックス
-
エクセル上の 2017/10/27 7:01...
-
EXCELでの時間計算(休憩時間の...
-
SQLエラーについて
-
SQL Sever での日付の差の求め...
-
(日付 - 日付)/数値
-
PL/SQLにて勤務時間の計算
-
date型へのinsertについて
-
実行エラー 3075:クエリ式`作...
-
yyy/mm/dd/形式
-
日付の範囲検索がしたい
おすすめ情報