• ベストアンサー

時刻の比較

現在Excelのマクロにて勤怠の時間計算を行っています。 終わった時間から開始時間を引いて何時間働いたかを出したいです。 ただ夜勤の場合日付が変わって就業時刻が終わる為 24時を超えた計算を行いたいです。 例 FM9時開始AM6時終わりの場合 30時-21時を引いた9時間という感じの計算を行いたいです。 行ってみた事。 TimeValue("30:00")-TimeValue("21:00")という計算を行ったところエラーとなってしまいました。(型が一致しませんとでました) TimeValueだと24:00以上の値は使えないのでしょうか? また、どの関数なら24時以降の計算が行えるのでしょうか? 初歩的な質問で申し訳ございませんが宜しくお願いします。

  • WDY
  • お礼率85% (188/219)

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

Double型として時間を取得してみてはいかがでしょう dim d1 as double, d2 as double, d3 as double dim t1 as date ' 6:00として入力 d1 = TimeValue("6:00") d2 = TimeValue("21:00") d3 = d1 - d2 if d3 < 0 then   ' マイナスの場合は 1日分加算する   d3 = d3 + 1.0 end if ' シリアル値を日付型に代入して時間を取得 t1 = d3 debug.print t1 といった具合です ...

WDY
質問者

お礼

なるほど!!! これなら日勤の場合も夜勤の場合も1つの計算式でいけます! 日付が変わった場合だけの式を考えておりました。 一つの式で両方をまかなえる式を書き込んで頂ありがとうございます♪

その他の回答 (1)

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.1

こんにちは Timevalue 関数は、時間ではなくて時刻をシリアル値(一日は、0 から0.99999999の範囲)に変換する関数です。 24:00以上の値は使えません。また24:00は、シリアル値で 0 (=0:00)になってしまいます。 シリアル値の性質を考えると単純に日付を含めて引き算すると時間が求められます(2009/3/10 9:30 のセルB1から 2009/3/9 8:15のセルA1を引く例 =B1-A1)。 24:00以上のシリアル値を表示するときは、表示形式を [h]:mm にします。

WDY
質問者

お礼

書き込みありがとうございます。 Timevalue関数は24:00以降は使用できなかったんですね。 >24:00以上のシリアル値を表示するときは、表示形式を [h]:mm にします。 これはセルの表示形式を変更するという事でしょうか? セルの表示形式ではなくマクロ内で24:00以降の値を使用する場合はどうしたらいいのでしょうか?

関連するQ&A

  • TIMEVALUEと"時刻"の違いを知りたいです

    エクセルで残業時間を計算しています。    A     B     1 退社時間 残業時間   2  20:00   ? という表があり退社時間が 18:00を過ぎた場合→残業時間を求める 18:00を超えない場合→0を表示させる というようになっています。 実は既に関数は組まれており =IF(A2>TIMEVALUE("18:00"),A2-"18:00",0) という関数がB2には入っています。 そこで質問なのですが このIF関数中の論理式 「A2>TIMEVALUE("18:00")」の意味は分かるのですが、 真の場合は「A2-"18:00"」なぜこれだけで答えがでるのでしょうか? 17:30を""で囲むだけでシリアル値に戻してくれるのでしょうか? だったら、論理式の「A2>TIMEVALUE("18:00")」中にTIMEVALUEは いらないのではないでしょうか? と思い、論理式のTIMEVALUEを「A2>"18:00"」に置き換えてみたのですが答えはでませんでした・・・ 「TIMEVALUE」と「時刻をダブルクォーテーションで囲む」 違いを教えてください。

  • 指定した時刻になるとセルに色がつくようにしたい

    初心者です。エクセルのVBAで設定した時刻になったらセルに色がつくようにしたいです。 例えば、17:00時にA1セル、18:00にA2セルに色を自動でつくようにしたいと思っています。 OnTimeを使ったらよいと思っていろいろ試しましたが、設定した時刻になってもなにも起こりません。 標準モジュールに以下の内容を記述して、パソコンの時計を変更して確認しています。 できたらクリックしないでファイルオープンしてなにもせずに設定時刻に実行されるようにしたいです。 最初の3秒でB1に現在の時間を取得。 セルA1とA2をクリアしてから設定時間に色をつけるようにしたつもりです。 下記が記述内容です。 Sub 指定時間にマクロを開始() Dim stime As Date Range("A1") = "" Range("A2") = "" Range("B1").Select stime = Now + TimeValue("00:00:03") Application.OnTime TimeValue(stime), "マクロ実行内容", TimeValue("00:05:00") End Sub Sub 時刻の設定1() Application.OnTime EarliestTime:=TimeValue("17:00:00"), Procedure:="Test" End Sub Sub Procedure() Range("A1").Interior.ColorIndex = 8 End Sub Sub 時刻の設定2() Application.OnTime EarliestTime:=TimeValue("18:00:00"), Procedure:="Test" End Sub Sub Procedure2() Range("A2").Interior.ColorIndex = 9 End Sub 実行マクロは有効にしています。 ご教授よろしくお願いします。

  • エクセルで時刻計算

    ご回覧ありがとうございます。 エクセルで勤怠の計算をするのにIF文を使って 早出 残業 を出勤時刻、退勤時刻を入力すると自動で早出時間残業時間が出るようにと思ったのですが、うまくいかない時間帯が出てきました。 早出の場合、出勤時刻-定時時刻で何時間の早出 という感じでうまく行きましたが、出勤時刻が遅刻や早退の場合計算出来ないことが分かりました。 何かよい方法はないでしょうか? 分かりにくくて申し訳ありません。 見えるか分かりませんが 画像添付しましたので分かる方よろしくお願いします。

  • Excel:特定の時刻から15分単位で表示させるには?

    勤務表を作成しています。 終了時刻ー開始時刻ー休憩時間という具合に当日の勤務時間を出力させるようにしています。 当日の勤務時間を出力するセルには以下のような条件で計算式を書いています。 <例> =IF(COUNT(C13:D13)<2,0,IF(AND(C13<="9:00"*1,D13>="17:40"*1,"18:1 4"*1>=D13),"7:40"*1,IF(AND(C13>="12:00"*1,"13:00"*1>=C13,D13>="1 7:40"*1),"4:40"*1,IF(AND(D13>="12:00"*1,"13:00"*1>=D13),"3:00"*1, FLOOR(D13-P13-E13,"0:15"))))) (1)開始、終了時刻が入力されていない時、0:00と表示。 (2)開始時刻9:00(もしくはその時刻より前)、 終了時刻17:40から18:14の間の時刻で入力された時、7:40と表示する。 (3)開始時刻12:00から13:00の間の時刻、 終了時刻17:40で入力された時、4:40と表示する。 (4)終了時刻12:00から13:00の間の時刻で入力された時、3:00と表示す る。 (5)(1)~(4)の条件以外は終了時刻ー開始時刻ー休憩時間という計算を 行い、15分単位で丸める。 (1)~(4)の条件は変更なしで、(5)の条件を変えます。 (5)終了時刻が18:15以降、当日勤務時間が7時間40分以上になる。 7時間40分から15分単位で丸める。 <例> 開始時刻9:00、終了時刻17:40の時、勤務時間7時間40分。(定時) 開始時刻9:00、終了時刻18:14の時、勤務時間7時間40分。 開始時刻9:00、終了時刻18:15の時、勤務時間7時間55分。 (一番上に書いたの計算式だと勤務時間が7時間45分になる) 開始時刻9:00、終了時刻18:16の時、勤務時間7時間55分。 ※P13は9:00以前の開始時間を9:00と考えさせる、 12-13時の時間を13時と考えさせる、 上記以外はそのまま表示させるという計算式を書いたセル。 (5)のような条件を加えた計算式が可能であれば教えて下さい。(アドバイス、ヒントでもかまいません。) よろしくお願いします。 使用ソフト:Excel2002

  • Excel 関数の引数で時刻を使いたい

    Excel2007です。 時間の計算をしたいのですがIF関数の引数に22:00等を使う方法を教えて下さい 次のようにすると22時までは計算されるのですが22時以降が計算されません。引数の時間の使い方が間違っているような気がするのですが、時刻を引数として使う方法を教えて下さい。 A1に日付  B2に開始時刻 =IF(WEEKDAY(A2)=7,"8:00","17:30") 土曜日は、8:00 月曜から金曜は、17時 日曜日は、入力しない  C2に終了時刻  手入力 例えば23:00 D2に =IF(C2<="22:00",C2-B2,"22:00"-B2)  開始時刻から22:00時までの時間 E2に =IF(C2>"22:00",C2-"22:00",0)  22:00以降終了時刻までの時間 よろしくお願いします。

  • 時間帯の識別がしたいのですが…

    呼出されて勤務した時間帯を管理したいのですが selectcase文で18:00から2:00まで勤務したら『準夜-深夜』と表記したいのですが『型が合いません』とエラーが出ます マクロは我流で勉強中なのでよろしくお願いします Dim 開始時間 As Date, 終了時間 As Date Dim 開始時間帯 As String, 終了時間帯 As String, 業務時間帯 As String Private Sub 業務ステータス() 開始時間 = TimeValue(開始時間TextBox.Text) 終了時間 = TimeValue(終了時間TextBox.Text) Select Case 開始時間 Case 開始時間 > TimeValue("8:29") And 開始時間 < TimeValue("17:00"): 開始時間帯 = "日勤" Case 開始時間 > TimeValue("16:59") And 開始時間 < TimeValue("24:00"): 開始時間帯 = "準夜" Case 開始時間 > TimeValue("0:00") And 開始時間 < TimeValue("8:30"): 開始時間帯 = "深夜" Case 開始時間 = TimeValue("0:00"): 開始時間帯 = "深夜" End Select Select Case 終了時間 Case 終了時間 > TimeValue("8:29") And 終了時間 < TimeValue("17:00"): 終了時間帯 = "日勤" Case 終了時間 > TimeValue("16:59") And 終了時間 < TimeValue("24:00"): 終了時間帯 = "準夜" Case 終了時間 > TimeValue("0:00") And 終了時間 < TimeValue("8:30"): 終了時間帯 = "深夜" Case 終了時間 = TimeValue("0:00"): 終了時間帯 = "深夜" End Select If 開始時間帯 = 終了時間帯 Then 業務時間帯 = 開始時間帯 Else 業務時間帯 = 開始時間帯 & "-" & 終了時間帯 End If End Sub

  • タイムカード管理

    エクセルでタイムカードの時刻を直接入力して勤怠を自動計算させるようにしたいのですが、その日ごとに就業時間 が異なるときどのようにすればいいのでしょうか。ちなみに、そのパターンは5つ前後です。

  • エクセルのマクロのタイマー機能について

    エクセルのマクロのタイマー機能について エクセルのマクロで指定した時間ごとにURLをクリックするマクロを作っています。 下記のように作っていますが、もっと簡略化して短い記述にしたく思います。 URLと指定時間は別のマクロで生成して、URLはA1~A49まで、指定時間はB1~B490までセルに書きこむようにしています。 URLはA49まで読んだらA1から読み直して10往復して、490回使用します。 使用するセルを一回ごとにずらしていくだけなので、簡単に出来そうな気もしますが、マクロ初心者のためわかりません>< 恐れ入りますが、ご教授いただければ幸いです。 ちなみにエクセル2007で作成しています。 Sub 一定の時間間隔でマクロを実行する() '進捗状況を示すために準備する 指定時刻 = Now + TimeValue("0時00分05秒") 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規01", TimeValue(待ち時間) End Sub Sub 新規01() Range("A1").Select 'A列のURLを取得 Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True 指定時刻 = Now + Range("B1").Value 'B列の時間を取得 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規02", TimeValue(待ち時間) End Sub Sub 新規02() Range("A2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True 指定時刻 = Now + Range("B2").Value 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規03", TimeValue(待ち時間) End Sub         ↓    同様の記述を490回繰り返す         ↓ Sub 新規建設490() Range("C1").Value = Now & " 終了" End Sub Private Sub 進捗状況を示すために準備する() Cells.Clear Columns("A:A").NumberFormatLocal = "yyyy/m/d h:mm:ss" Range("A1").Select ActiveCell.Value = Now & " 開始       " Columns("A:A").EntireColumn.AutoFit End Sub

  • 勤怠管理のエクセル関数 添削お願い致します。

    はじめまして。 勤怠管理の出勤簿を過去の質問を参考にしながら作成しておりますが、 「深夜割増時間」の計算で行き詰ってしまいました。 【22時~5時の時間帯に何時間勤務しているか】を計算したいのですが、 21時~6時の人や、2時~11時の人などがいる為、過去の質問もうまく参考にできませんでした。 以下の考えで計算式を作ってみました。 (1)出勤が5時過ぎ&退社が22時前ならばゼロ。 (2)出勤が5時以前なら5時から出勤時間を引く。 (3)退社が22時以降なら退社時間から22時を引く。 =IF(出勤時間>=TIMEVALUE("5:00")*(退社時間<=TIMEVALUE("22:00")),0,IF(出勤時間<TIMEVALUE("5:00"),TIMEVALUE("5:00")-出勤時間),IF(退社時間>TIMEVALUE("22:00"),退社時間-TIMEVALUE("22:00")) どなたかお助けいただければ幸いです。m(_ _)m

  • 労働条件通知書における就業時刻について

    初めまして。 表題の件に関しまして、皆さまにお伺いしたくご質問させていただきます。 現在、派遣で働いておりまして、 募集要項に記載の就業時刻と、実際の勤務時間との違いに疑問を抱いております。 募集要項と労働条件通知書には下記のように記載されておりました。 〈募集要項〉 8:00~17:00または、9:00~18:00 1日8時間勤務 変動あり 〈労働条件通知書〉 08:00~17:00 09:00~18:00 ※業務状況により就業時間を繰り上げ繰り下げ及び変更する場合がある。 実際に勤務をしてみると、就業時間の繰り上げ繰り下げに加え、 2時間ほどの休憩を挟み、夕方〜9時頃までの勤務がございました(当番制)。 たしかに労働条件通知書には、勤務時間の「変動あり」と記載されておりますが、 始業〜就業時刻内で変動するものだと勝手に思っており、 中抜けのような勤務を交代で行っていることは勤務開始後に知りました。 この場合ですが、労働条件通知書に「就業時刻を変更する場合がある」という記載があるので、 このような勤務時間および勤務形態も、労働者側は納得せざるを得ないものなのでしょうか。 (口頭での説明等もなく、勤務開始後のシフト表を見て知りました。 気になりましたので、お詳しい方にご教授いただきまく存じます。