[[20180921141101]] 『VBA 休憩時間計算』(アネ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA 休憩時間計算』(アネ)

開始時間と終了時間を手入力しボタンを押したら定時休憩時間を自動で計算するマクロのコードを教えていただきたいです。

   G     H    I J   K
2開始時間 終了時間    休憩時間
3 8:30       14:00           1:15
4
5
6
.
.
.
.
.

現在は関数を入れて自動で出るようにはなっているのですが、
作業日報ですので1日分15行、半年間の人数分(20人)を設定していたらExcelが重くなってしまったのでマクロで軽くならないかと思い質問いたしました。

定時休憩時間
10:00~10:15
12:00~13:00
15:00~15:10
17:30~17:45

上記の時間帯の休憩時間を計算していただきたいです。
よろしくお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


重いのであればファイルを分割してはいかがですか?
月ごとに管理するようにすればそこまで重くならないかと思いますが…

(名無し) 2018/09/21(金) 14:39


既に関数が設定されているのならば、手動計算にすることで対応できないでしょうか?
(ゆ) 2018/09/21(金) 14:43

名無し様
その後に時間を集計しないといけないので分割はできません、本当は1年分入力できるようにしたいのですが、半年分で断念しております。

ゆ様
計算方法の設定で入力する時は手動で、入力終了後再計算実行ということでしょうか?
Excelを軽くしたいのですが・・・難しいでしょうか?
(アネ) 2018/09/21(金) 15:17


Sub main()
    Dim c As Range, i As Long
    For Each c In Range("G3:G" & Rows.Count).SpecialCells(2)
        For i = c.Value * 24 * 60 To c.Offset(, 1).Value * 24 * 60
        If TimeValue("10:00") < TimeValue(Format(i / (24 * 60), "hh:nn")) And TimeValue("10:15") >= TimeValue(Format(i / (24 * 60), "hh:nn")) Then
            ctr = ctr + 1
        End If
        If TimeValue("15:00") < TimeValue(Format(i / (24 * 60), "hh:nn")) And TimeValue("15:10") >= TimeValue(Format(i / (24 * 60), "hh:nn")) Then
            ctr = ctr + 1
        End If
        If TimeValue("12:00") < TimeValue(Format(i / (24 * 60), "hh:nn")) And TimeValue("13:00") >= TimeValue(Format(i / (24 * 60), "hh:nn")) Then
            ctr = ctr + 1
        End If
        If TimeValue("17:35") < TimeValue(Format(i / (24 * 60), "hh:nn")) And TimeValue("17:45") >= TimeValue(Format(i / (24 * 60), "hh:nn")) Then
            ctr = ctr + 1
        End If
        Next i
        c.Offset(, 4).Value = Format(ctr / (24 * 60), "h:n")
    Next c
End Sub

(mm) 2018/09/21(金) 16:01


mm様

ありがとうございます。
試させていただきました。
セル4の休憩時間が下記のようにならないでしょうか?

   G     H    I J   K
2開始時間 終了時間    休憩時間
3 8:30       14:00           1:15
4 14:00      17:30           0:15
5
6
.
.
.
.
.

(アネ) 2018/09/21(金) 16:15


失礼
For Each c In Range("G3:G" & Rows.Count).SpecialCells(2)
        ctr = 0'★追加
        For i = c.Value * 24 * 60 To c.Offset(, 1).Value * 24 * 60

(mm) 2018/09/26(水) 10:32


mm様

うまくできました。
ありがとうございました‼
(アネ) 2018/09/26(水) 13:28


下記のようになってしまうのですが、0分にならないでしょうか?
よろしくお願いします。

   G     H    I J   K
2開始時間 終了時間    休憩時間
3 10:15      12:00           0:01
4 13:00      14:35           0:01
5
6
.
.
(アネ) 2018/10/09(火) 15:16

10:15の1分間は休憩1分にカウントされるのでは?
開始時間を10:16とすればいいのでは?
あるいは、>= を > に変えてはいかがですか?
(mm) 2018/10/10(水) 09:38

mm様

SUM(MIN(MAX(H3,"10:00"),"10:15")-MAX(MIN(G3,"10:15"),"10:00"),MIN(MAX(H3,"12:00"),"13:00")-MAX(MIN(G3,"13:00"),"12:00"),MIN(MAX(H3,"15:00"),"15:15")-MAX(MIN(G3,"15:15"),"15:00"),MIN(MAX(H3,"17:30"),"17:45")-MAX(MIN(G3,"17:45"),"17:30"))

上記が今まで使用していた関数なのですが、結果が同じになるマクロはできないでしょうか。

(アネ) 2018/10/10(水) 11:19


Sub main()
    Dim c As Range
    For Each c In Range("G3:G" & Rows.Count).SpecialCells(2)
        c.Offset(, 4).Value = "=Sum(Min(Max(H" & c.Row & ", ""10:00""), ""10:15"") - Max(Min(G" & c.Row & ", ""10:15""), ""10:00""), Min(Max(H" & c.Row & ", ""12:00""), ""13:00"") - Max(Min(G" & c.Row & ", ""13:00""), ""12:00""), Min(Max(H" & c.Row & ", ""15:00""), ""15:15"") - Max(Min(G" & c.Row & ", ""15:15""), ""15:00""), Min(Max(H" & c.Row & ", ""17:30""), ""17:45"") - Max(Min(G" & c.Row & ", ""17:45""), ""17:30""))"
        c.Offset(, 4).Value = c.Offset(, 4).Value
    Next c
End Sub
(mm) 2018/10/10(水) 13:44

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.