• 締切済み

日報の時間計算

お世話になっております。 Windows 7 Access 2007 Private Sub 完了時間_AfterUpdate() Dim StartTime, EndTime, Kugiri, tuujou, Soukinmu, shinyakugiri, SinyaTime As Long tuujou = 8: '通常勤務時間 8時間 Kugiri = 5: '区切り時間 午前5時 shinyakugiri = 22: '深夜区切り 22時 '処理がわかりやすくするために時刻(m日)を数値(n時間)に変換 StartTime = Me.開始時間 * 24 EndTime = Me.完了時間 * 24 '完了時間が 0時以上 5時以下 の場合、24時間足す。 If EndTime >= 0 And EndTime <= Kugiri Then EndTime = EndTime + 24 End If '深夜計算 SinyaTime = EndTime - shinyakugiri - Me.休憩 If SinyaTime > 0 Then Me.深夜 = SinyaTime Else Me.深夜 = 0 End If '総勤務時間算出 Soukinmu = EndTime - StartTime - Me.休憩 '(Me.sinyaは前の処理で、深夜にかかっていない場合0なので、適切に計算される) Soukinmu = Soukinmu - Me.深夜 '総勤務時間が通常勤務時間以下の場合、 '残業時間は0、勤務時間は総勤務時間。 '総勤務時間が通常勤務時間より大きい場合、 '残業時間=総勤務時間-通常勤務時間 勤務時間=通常勤務時間 If Soukinmu <= tuujou Then Me.残業 = 0 Me.勤務時間 = Soukinmu Else Me.残業 = Soukinmu - tuujou Me.勤務時間 = tuujou End If '工数算出 'If EndTime <= 17 Then If Soukinmu <= tuujou Then 工数 = 勤務時間 / tuujou Me.勤務時間 = Soukinmu Else 工数 = tuujou / 8 End If End Sub このコーナーで教えていただいた日報の時間計算ですが、とてもうまく計算できました。ですが、問題発生したため、修正が必要ですけどどいう風に変更すればいいか分からなくてまた質問させていただきます。 言葉でうまく説明出来ないので、例を挙げます。 2011/12/09 Aさんの場合 工事番号 日付 名前 開始   終了   勤務時間 残業 0001   12/9 A   8:00 17:00   8 0002   12/9 A   17:00  20:00         3 そんな感じで日報に表示させたいですが現在の日報はこんな感じです。 工事番号 日付 社員ID 名前 開始   終了   勤務時間 残業 0001   12/9  1    A   8:00 17:00   8 0002   12/9  1    A   17:00  20:00  3 今のコードなら修正できるでしょうか? 素人の考えですが、社員IDと日付が同じなら勤務時間の集計で残業時間になるということですがどこに何を書けば全然わかなかったです。 どなたか教えていただけませんか? よろしくお願い致します。       

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

前回のQAがわからないので経緯はわかりませんが、 今回要求された内容とはあっていないプログラムになっているので 根本的に無理があるのでは? だいたい、今回の話では 工事番号 日付 社員ID 名前 開始   終了   勤務時間 残業 0001   12/9  1    A   8:00 17:00   8 0002   12/9  1    A   17:00  20:00  3 は 工事番号 日付 名前 開始   終了   勤務時間 残業 0001   12/9 A   8:00 17:00   8 0002   12/9 A   17:00  20:00         3 こうだしたい。ということですが、 工事番号 日付 名前 開始   終了   勤務時間 残業 0003   12/8 A   8:00  15:00   6 0004   12/8 A  15:00  20:00   5 はどうだすの?(絶対にありえないなら問題ないですが) >素人の考えですが、社員IDと日付が同じなら勤務時間の集計で残業時間になるということですが からは、 工事番号 日付 名前 開始   終了   勤務時間 残業 0003   12/8 A   8:00  15:00   6 0004   12/8 A  15:00  20:00        5 としたいということに読み取れますが、 工事番号 日付 名前 開始   終了   勤務時間 残業 0003   12/8 A   8:00  15:00   6 0004   12/8 A  15:00  20:00   2    3 が正しいでしょう。 ま、考え方としては、 日付 名前 開始   終了   勤務時間 残業  深夜時間 12/8 A   8:00  20:00   8  3  0 をまず求める。 工事番号 日付 名前 開始   終了   勤務時間 残業 0003   12/8 A   8:00  15:00 0004   12/8 A  15:00  20:00 を日付、開始の小さい順番に1件ずつ読み込む。 まず1件目、時間計算をして、 工事番号 日付 名前 開始   終了   勤務時間 残業 0003   12/8 A   8:00  15:00 6 とし、 日付 名前 開始   終了   勤務時間 残業  深夜時間 12/8 A   8:00  20:00   8  3  0 を 日付 名前 開始   終了   勤務時間 深夜時間 12/8 A   8:00  20:00   2  3  0 とする 2件目、時間計算をして、 工事番号 日付 名前 開始   終了   勤務時間 残業 0004   12/8 A  15:00  20:00 5 となるが 日付 名前 開始   終了   勤務時間 深夜時間 12/8 A   8:00  20:00   2  3  0 から勤務時間を引くとマイナスなので、こちらの2を勤務時間にいれる。 工事番号 日付 名前 開始   終了   勤務時間 残業 0004   12/8 A  15:00  20:00 2 3 さらに、残業時間を引くとマイナスにはならないのでこれでOK。 マイナスになるようなら残業時間、深夜時間について同様の処理を行う。 という方法がいいように思われますが、テーブルも増えますし、 勤務時間計算のロジックはそのまま使えるでしょうけれども、他の部分は、 既存のプログラムとは、まったく別のプログラムになるでしょう。 ★今回の対象となる件数が少ないのであれば、 工事番号 日付 社員ID 名前 開始   終了   勤務時間 残業 のテーブルから、 日付 社員ID 件数(count(*)) を求めて件数が2以上の日付、社員IDに対して手修正したほうがてっとりばやいのでは?

nuocngoai
質問者

お礼

ご回答していただき、ありがとうございます。 >工事番号 日付 名前 開始   終了   勤務時間 残業 >0003   12/8 A   8:00  15:00   6 >0004   12/8 A  15:00  20:00   5 >はどうだすの?(絶対にありえないなら問題ないですが) このような計算は絶対ないです。 回答内容を参考させていただきます。 何とかやってみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

プログラムをする立場の人じゃなくて、完全にお客さんだね。 無料でプログラム作って(修正して)下さいって言うだけ。 学生が勉強してるだけならまだ許せるけど、 社会人が自分の業務で使って利益出してるなら、 他人のふんどしで相撲とって賞金もらっているようなもの。 浮いたお金や時間で勉強して少しでも努力と成果が 見えれば、回答者の助言がちょっとした日本の技術発展に 繋がったのかという気にもなるけど、これっぽっちも 理解して無いなら回答者が他人の仕事を代わりにやらされた ってだけじゃん。 自分の仕事を自分の力で解決する対価として給料もらって るんじゃないの?他人に仕事を押し付けて給料は自分のもの? 口を開けば「分かりません。できません。」で ソース上に > Me.残業 = Soukinmu - tuujou すでに残業時間の計算らしきものがあるのに > 素人の考えですが、社員IDと日付が同じなら勤務時間の > 集計で残業時間になるということですが ・・・全然内容を理解しようとしてないという事? あきれた。 ま、他の人の参考にして欲しい情報は > Dim StartTime, EndTime, Kugiri, tuujou, Soukinmu, shinyakugiri, SinyaTime As Long VB6.0 以前と VBA でこの宣言方法はだめだろうということ。 Long は SinyaTime だけにしか適用されないはず。 VB なら GetType で型確認できるんだけど、VBA ならブレークポイント 置いて変数にカーソル合わせて、SinyaTime の初期値は 0 だけど、 他の変数が Empty で表示されたら想定外でしょ?って事かな。 回答が全く無いと削除される可能性が高くなるから書くけど、 提示のコードと出力結果の繋がりが無い。もう1処理あるはず。 出力処理が丸々抜けてる。 リンクもないし過去の回答を知らないけど、わざわざ残業時間を 総勤務時間から引いて計算しているんだから、残業時間のデータも そのまま出力処理で判断できるはず。つまりはもうすでに残業時間 とわかっているデータの出力位置だけ変えればできてしまう可能性大。

nuocngoai
質問者

お礼

早速ご回答ありがとうございます。 勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 日報計算

    お世話になっております。 うまく説明できませんが以下のデータがありますが、 ID 日付 社員ID 開始 終了  時間 残業 1 12/1 001   8:00 17:00  8 2 12/2 001   17:00 20:00  3 本当は下のように作りたいです。 ID 日付 社員ID 開始 終了  時間 残業 1 12/1 001   8:00 17:00  8 2 12/2 001   17:00 20:00     3 ですのでSQLでつくってみました SQL = ("SELECT T_作業日報明細.日付, T_作業日報明細.個人ID,Min(T_作業日報明細.[Start Time]) AS [Start Timeの最小], Max(T_作業日報明細.[End Time]) AS [End Timeの最大], Sum(T_作業日報明細.時間) AS 時間の合計" & "FROM T_作業日報明細" & "GROUP BY T_作業日報明細.日付, T_作業日報明細.個人ID;") ですが以下のコードはVBAでどいう風に書けばいいか分かりません。 もし日付と社員IDが同じなら 時間の合計 = EndTimeの最大 - StartTimeの最小 - Me.休憩 If 時間の合計 <= 8 Then Me.残業 = 0 Me.勤務時間 = 時間の合計 Else Me.残業 = 時間の合計 - 8 Me.勤務時間 = 8 End If そうではない場合 Soukinmu = EndTime - StartTime - Me.休憩 If Soukinmu <= 8 Then Me.残業 = 0 Me.勤務時間 = Soukinmu Else Me.残業 = Soukinmu - 8 Me.勤務時間 = 8 End If めちゃくちゃだと思いますがご指導をよろしくお願い致します。

  • 日報の時間計算を行う関数について

    勤務時間を管理の日報を作成しています。以下の条件をつけて出勤時間と退社時間を記入するだけで1日の総勤務時間を表示してくれる関数をご教示お願いします。 ・9:00出勤で18:00定時退社で15分単位で表示 ・セル(開始)は9:00、(終了)に18:00以降の時間を手入力 ・セル(工数)に関数で総勤務時間を計算 ・9:00から18:00までに1時間15分の休憩をとるため、自動的に差し引いて計算 ・残業は18:15からカウントされるため、18:30以降残業して退社した場合は15分差し引いて計算 ・残業最終時間0:00までとして計算 ・セル(開始)、(終了)に9:00~0:00の15分単位の時間以外を入力はない前提とします ・遅刻、早退による変則時間の入力はない前提とします 【例】 (開始)9:00、(終了)18:00の時は(工数)に7.75 (開始)9:00、(終了)18:15の時は(工数)に7.75 (開始)9:00、(終了)18:30の時は(工数)に8 (開始)9:00、(終了)0:00の時は(工数)に13.5 よろしくお願いします。

  • ACCESS で深夜計算

    いつもお世話になっております。 Access 2007で日報を作っていますが深夜計算のコードは次のように書きましたがうまくできなくて、どこでどんな間違いかも分からないです。教えていただきたいです。 If 22 <= 完了時間 <= 5 Then '完了時間は22時から朝の5時までなら深夜計算 深夜 = (完了時間 - #10:00:00 PM#) * 24 - 休憩  Else 深夜 = 0 End If 全然VBAのことが分からなくて書きましたので教えていただくと助かります。 よろしくお願いします。

  • 【EXCEL2007】複雑な時間計算

    【EXCEL2007】複雑な時間計算 アルバイトの時給計算表を作成しています。 詰まってしまったところがあるので、ご教示ください。 勤務時間は長時間に渡る者もおり、勤務時間中の時給設定が 「通常勤務(D1)」,「深夜勤務(E1)」,「超深夜勤務(F1)」,「残業(G1)」 と4パタンあります。 店舗の稼働時間としては、17:00~翌8:00までとなり、 A1:出勤時間 B1:退勤時間 C1:休憩時間 に時間を入力(午前1時の場合は25:00)することによって、 各パターンのセルに実際に勤務した時間を自動表示させたいと 思っています。 例)17:00~32:00まで勤務した場合: D1=5:00 E1=5:00 F1=2:00 G1=3:00 それぞれの時給パターンの条件は以下です。 ・通常勤務:17:00~22:00 ・深夜勤務:22:00~29:00 ・超深夜:そのシフトでの勤務時間が8時間を超える者で8時間を超えた時間から29:00までの時間 ・残業:29:00~32:00 ・休憩はどのタイミングでとっても、通常勤務時間から引く事とします。 通常勤務(D1)は以下の通りにすることで、表示することができました。 D1=IF(A1>=TIMEVALUE("22:00"),0,IF(D6<=TIMEVALUE("22:00"),(B1-A1),("22:00"-A1-C1))) が、残りの時給パターンの条件分岐が自分には複雑で詰まってしまいました。 そのものズバリの条件式を教えていただけると幸いですが、 ヒントだけでも、ご教示いただけませんでしょうか。 よろしくお願いいたします。

  • Access で作業日報

    いつもお世話になります。 OS:Windows 7 Access 2007 このコーナーで作業日報の時間計算について質問させていただきました。 教えていただいたのは、クエリで関数に入れて、フォームを作成すれば、うまく時間が表示されましたが新規入力ができませんでした。 今回はVBAでした方がいけるのではないでしょうかと思いましたがコードの書き方が分からなくて助けてもらいたいです。 フォームに名前・開始時間・完了時間・休憩時間・勤務時間・残業時間・工数とそれぞれテキストボックスがあります。 勤務時間=開始時間-完了時間        8:00  -  17:00 =8時間 休憩時間 = 12時~13時 残業時間=17:00以降 工数は8時間=1工=勤務時間 開始時間と完了時間を入力したら、勤務時間は8時間で残りは残業時間を自動的計算できようにしたいです。 よろしくお願い致します。

  • エクセル 就業時間計算について

    エクセルで勤務時間計算をしたいと思っています。 ですが、どうしてもうまく計算ができません・・・ どなたかご存知の方、お力をかしてください<m(__)m> 例)       A       B        C       D       E    出社時間  退社時間  通常残業   深夜  合計(勤務合計)  1  22:00     10:00  2    4:00     14:00  3  23:00     15::00 勤務時間が不規則なので、出勤時間まちまちです・・・ それと、通常残業と、深夜勤務の時間をふりわけが出来れば尚助かります。 どうか C D E に入れる関数を教えてください

  • 最新データ取得

    いつもお世話になります。 Access 2007のコードを教えていただきたいです。 Access で社員単価管理を作成しています。 クエリで社員の単価を計算させて、日報フォームに表示させることができました。以下のコードで If Not IsNull(Me![個人ID]) Then Me![工数単価] = DLookup("日給", "Q_社員別給与最新日付", "[個人ID]=" & Me![個人ID]) End If 社員の単価は上がる場合がありますので、社員単価入力テーブルから最新の日付のデータを取得するため、クエリを作成しました。 これでうまく行くと思ったら、問題発生しております。 日報フォームのデータを修正する時、最新日付の単価も変わってしまいます。 うまく説明できないですので、以下のようです 社員単価入力テーブル 日付     個人ID 原価金額 20110401   01    6400 20110701   01    8000 日報フォーム 日付    個人ID 出勤時間 退勤時間 工数 残業 日給 20110630   01    8:00    18:00    1   1  7200   20110701   01    8:00    17:00    1   0  8000 データ修正後 日付     個人ID 出勤時間 退勤時間 工数 残業 日給 20110630   01    8:00    17:00    1   0   8000 データ修正後に表示してほしいのは 日付   個人ID 出勤時間 退勤時間 工数 残業 日給     20110630  01   8:00     17:00   1   0   6400 つまり、 社員単価入力テーブルの日付<日報フォームの日付なら、最新の日付のデータで計算してほしいです。そうではない場合、最新日付より前のデータで計算するというコードが書きたいですが、どういう風にに書けばいいか全く、わかりません 教えて下さい。 よろしくお願いします。

  • タイムスタンプを挿入して、時間の経過に合わせて色

    Q列に同じ行のA列に文字が入ると、タイムスタンプを挿入して、時間の経過と共に、720時間かけて白から赤にグラデーション変化する。 上記のVBAを行いたいのですが、オーバーフローエラーが発生します。どの様に修正すれば良いでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Dim currentDate As Date Dim startTime As Date Dim endTime As Date If Target.Column <> 1 Or Target.Cells.Count > 1 Then Exit Sub If Target.Offset(0, 15).Value = "" And Target.Value <> "" Then startTime = Now() Target.Offset(0, 15).Value = startTime ElseIf Target.Offset(0, 15).Value <> "" And Target.Value = "" Then endTime = Now() Target.Offset(0, 15).Value = "" End If currentDate = Now() If Target.Offset(0, 15).Value <> "" Then Target.Offset(0, 16).Interior.Color = GradientColor(Target.Offset(0, 15).Value, currentDate, startTime, 720) Else Target.Offset(0, 16).Interior.Color = RGB(255, 255, 255) End If End Sub Function GradientColor(ByVal timeStart As Date, ByVal timeEnd As Date, ByVal startTime As Date, ByVal duration As Integer) As Long Dim secondsElapsed As Long Dim fractionTimeElapsed As Double secondsElapsed = DateDiff("s", startTime, timeEnd) ➡︎ fractionTimeElapsed = secondsElapsed / (duration * 3600) fractionTimeElapsed = IIf(fractionTimeElapsed > 1, 1, fractionTimeElapsed) GradientColor = RGB(255 * (1 - fractionTimeElapsed), 255 * fractionTimeElapsed, 255 * fractionTimeElapsed) End Function

  • 時間の計算

    勤務時間を管理する為に計算式を作りたいのですが、よく分からなかったので質問いたします。 以下の条件に当てはまる様な式でお願いします。 例えば ・A1に出勤時刻、B1に退勤、C1に通常勤務時間、D1にに残業を表示させるとした場合で、昼休みは1時間(12:00~13:00固定)引きます。 ・出勤時刻は8:00とは限らず、10:00や午後~でも当てはまる様にしたいので、昼休みの時刻を固定して引きたいのです。 ・残業時間とは、通常勤務時間が8時間を超えた場合に適用したいと思います。 以上でC1とD1に入る計算式を知りたいので、宜しくお願いします。 (不明な点がありましたら追加で投稿します。)

  • 残業計算(エクセル)

    残業の計算を関数を使って計算したいのですがうまくいきません。 残業開始は17:20~と決まっており、2時間毎に15分の休憩が必要で 時間単位での管理で最小は0.25時間となり、満たない場合は切り上げとなります。 また、22:00以降は深夜勤務となります。 例えば17:20~23:00の場合は、残業5.25時間、深夜勤務1時間となります。 (列としては、開始時間17:20、終了時間、残業、深夜勤務の4列です) また、有給休暇とかも記載するのでIF式は極力少なく(5個位が限度)したい です。どなたかすっきりした形のものを提案してくださるとありがたいです。