![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
お世話になっております。
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と日付が同じなら勤務時間の集計で残業時間になるということですがどこに何を書けば全然わかなかったです。
どなたか教えていただけませんか?
よろしくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
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に対して手修正したほうがてっとりばやいのでは?
ご回答していただき、ありがとうございます。
>工事番号 日付 名前 開始 終了 勤務時間 残業
>0003 12/8 A 8:00 15:00 6
>0004 12/8 A 15:00 20:00 5
>はどうだすの?(絶対にありえないなら問題ないですが)
このような計算は絶対ないです。
回答内容を参考させていただきます。
何とかやってみます。
ありがとうございました。
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処理あるはず。
出力処理が丸々抜けてる。
リンクもないし過去の回答を知らないけど、わざわざ残業時間を
総勤務時間から引いて計算しているんだから、残業時間のデータも
そのまま出力処理で判断できるはず。つまりはもうすでに残業時間
とわかっているデータの出力位置だけ変えればできてしまう可能性大。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ビジネス・キャリア) 勤務時間の割増について教えてください。 現在日勤と夜勤で勤務しています。 日勤は9:00から20:0 5 2022/05/08 22:40
- Excel(エクセル) 指定した値以上の中で最小値を出したい 7 2022/10/24 21:12
- Excel(エクセル) エクセルで勤務時間の計算をしています。 下記図でstartは勤務開始時間、endは勤務終了時間です。 5 2022/06/07 13:51
- その他(Microsoft Office) Excel 勤務時間の計算について~(残業)有.無しの場合。 4 2022/07/17 21:03
- 労働相談 当直勤務の時間外について。 今年の4月から新しく社会人になった者です。 私の職場では当直勤務があり、 4 2022/05/15 17:03
- その他(ビジネス・キャリア) 日報の実務労働時間の集計について困っています。 2 2023/06/09 19:00
- 転職 転職活動中で2社内定があり迷っています。皆様ならAとBどちらの方が良いと思いますか?理由もお願いしま 1 2023/02/06 12:20
- 所得・給料・お小遣い 勤務時間:8時ー17時勤務(2時間休憩) 実稼働:7時間 勤務日数:週6勤務 毎週日曜日を休みとして 2 2023/07/26 18:25
- 転職 現在郵便局の契約社員で配達や集荷で3年程勤めています。正社員になりたく転職活動をしております。内定が 5 2023/02/12 01:07
- 労働相談 24時間勤務が断続的労働になった場合の給与。 元々24時間の内16時間が勤務で休憩と仮眠で20万円の 1 2022/07/26 11:05
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームのラベルに日...
-
VB.net 登録されている日付の連...
-
SUMPRODUCT関数 『複数条件』...
-
パソコンの日付変更したら、ヤ...
-
VBSでTXTファイルを配列に格...
-
大文字Oと0の違い
-
励磁パターン
-
他のPCの日付・時刻の取得
-
テキストボックスに今日の日付...
-
日付によって表示するページを...
-
使用期限付きDLL
-
【Excel VBA】条件に合った行の...
-
DataGridViewの和暦表示について
-
最近、iPhoneがおかしいです 私...
-
OCNモバイルONEを使っています...
-
質問に回答が付くとメールにま...
-
5年前のノートPCから最新機の処...
-
電話の着信が来てないのに着信...
-
iPhoneの通知が何故か来なくな...
-
アンドロイドから通知無しで鳴る音
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームのラベルに日...
-
エクセルのVBAで日付を検索し転...
-
Eclipseの対応する括弧の強調表...
-
DataGridViewでyyyy/MM/dd
-
VisualBasic6.0のFormat関数で...
-
JSPからYYYYMMDDで日付入力する
-
今日より前の書き方 マクロ
-
3人のじゃんけんのプログラム
-
システム日付とは?
-
【Excel VBA】条件に合った行の...
-
VBA 日付、未来の日付はエラー...
-
【VBA】土日をスキップして日付...
-
VBAで当月の1日を表示するには...
-
「eclipseで作るカレンダー(ス...
-
VBAの質問になります 行の非表示
-
VB 日付範囲チェック
-
コンボボックスに日付を表示する
-
テキストボックスにカレンダー...
-
指定した日付が、その月の第何...
-
VB6.0 のformat関数について
おすすめ情報