[[20191211112614]] 『VBAで時間を累積する方法』(お茶) ページの最後に飛ぶ

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

 

『VBAで時間を累積する方法』(お茶)

01:00
00:45
02:00
これを時刻ではなく時間として累積していくコードはどのように記載したらよいか教えて頂けますでしょうか。
(03:45 3時間45分としたいです。)

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


書式設定で表示形式を[h]:mmにしてみてください。
(エコおにぎり) 2019/12/11(水) 11:36

ユーザー定義で表示形式を[h]:mmにすると、
0.04166666666666670.031250.0833333333333333になってしまいました。
どこかがおかしいのでしょうか。

(お茶) 2019/12/11(水) 11:48


 時間データを&でつなげているということはないだろうか?
 もしそうであれば+で足し合わせてくれ、
(ねむねむ) 2019/12/11(水) 12:05

Sub main()
    '集計対象セル範囲を選択して実行
    Dim c As Range, h As Long, m As Long
    For Each c In Selection
        If UBound(Split(c.Text, ":")) = 1 Then
            h = h + Val(Split(c.Text, ":")(0))
            m = m + Val(Split(c.Text, ":")(1))
        End If
    Next c
    h = h + Int(m / 60)
    m = m - Int(m / 60) * 60
    MsgBox h & "時間" & m & "分"
End Sub
(mm) 2019/12/11(水) 12:38

すみません、実際のEXCELシートですと、
G列 → 勤務開始時間(例9:00)
J列 → 勤務時間(例7:45)※関数の式=IF($G5="","",IF($H5>$G5,($H5-$G5-$I5-"1:00"),($H5+"24:00"-$G5-$I5-"1:00")))が入っています。
K列 → 残業実績※関数の式=IF($G5="","",IF($J5-"7:45"=0,"",IF($J5-"7:45">=0,$J5-"7:45","")))が入っています。

Q列にK列の時間を日毎に累積していきたいのですが、うまくいきません。
自分で書いたコードを記載しますので、おかしなところがありましたら教えていただけますでしょうか。

                'G列勤務開始よりH列勤務終了が大きい場合(例9:00〜17:45)
                If TimeValue(Time02) > TimeValue(Time01) Then
                    '【残業時間】を累積  その時点での合計残業時間 + H列勤務終了 - G列勤務開始 - I列外出 -1時間お昼休憩 - 定時の7:45を引く(=残業のトータルなので!)
                    Total_Time_int = Total_Time_int + TimeValue(Time02) - TimeValue(Time01) - TimeValue(Time07) _
                        - TimeValue("1:00:00") - TimeValue("7:45:00")
                        '累積が0だった時
                        If Format(Total_Time_int, "hh:mm") = "00:00" Then
                            .Range(メモ2 & Cnt05) = "'00:00"
                        '累積が0じゃないときは何もしない
                        Else
                            '累積が0より下のとき(=マイナスになっちゃうとき)
                            If Total_Time_int < 0 Then
                                '-マイナスを付けてあげてプラスにする
                                .Range(メモ2 & Cnt05) = "'-" & Format(Total_Time_int, "hh:mm")
                            '累積が0より上のとき
                            Else
                                '"hh:mm"形式の文字列にする
                                .Range(メモ2 & Cnt05) = "'" & Format(Total_Time_int, "hh:mm")
                            End If
                        End If
                '日マタギの判定 跨いでる場合
                Else
                    '【残業時間】を累積 その時点での合計残業時間 + H列勤務終了 + 【※23:59:00を追加】 - G列勤務開始 - I列外出 - 1時間お昼休憩 - 定時の7:45を引く(=残業のトータルなので!)
                    '※真夜中を0:00ではなく24:00・・25:00・・26:00のようにするが、システム上24:00:00を足せないので一旦23:59:00を足す
                    Total_Time_int = Total_Time_int + TimeValue(Time02) + TimeValue("23:59:00") _
                        - TimeValue(Time01) - TimeValue(Time07) - TimeValue("1:00:00") - TimeValue("7:45:00")
                    '+1分を別で足す
                    Total_Time_int = Total_Time_int + TimeValue("00:01:00")
                        '累積が0だった時
                        If Format(Total_Time_int, "hh:mm") = "00:00" Then
                            .Range(メモ2 & Cnt05) = "'00:00"
                        '累積が0じゃないときは何もしない
                        Else
                            '累積が0より下のとき(=マイナスになっちゃうとき)
                            If Total_Time_int < 0 Then
                                '-マイナスを付けてあげてプラスにする
                                .Range(メモ2 & Cnt05) = "'-" & Format(Total_Time_int, "hh:mm")
                            '累積が0より上のとき
                            Else
                                '"hh:mm"形式の文字列にする
                                .Range(メモ2 & Cnt05) = "'" & Format(Total_Time_int, "hh:mm")
                            End If
                        End If
                End If

(お茶) 2019/12/11(水) 15:45


コードは見ていません
Q列に=SUM(K$1:K1)のように先頭セル行だけ絶対参照のSUM式を入れてみてください。
(チラシ寿司) 2019/12/11(水) 16:26

コメント返信:

[ 一覧(最新更新順) ]


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