[[20200319102246]] 『横軸が1時間刻みのグラフを作りたい』(tkn) ページの最後に飛ぶ

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

 

『横軸が1時間刻みのグラフを作りたい』(tkn)

x軸が作業時間、横軸が1時間刻みの時間となっている縦棒グラフを作りたいです。

データテーブルに持っている情報は開始時間・終了時間・作業時間の三つで、「何時から何時まで何分働いたか」ということは分かります。(この行が複数あって、24時間中の作業時間の偏りを見たい感じです)

これを1時間刻みのグラフで表したいのですが、どのように手を入れればいいか分からず躓いています...。
10-12時で120分というデータがあるならばグラフには10時と11時にそれぞれ60を充てたいのです。
さらに実際には10:30-11:30などのデータもあり、その場合には10時に30、11時に30を値として加えたいです。

いまいち実装のための方法が分からず、どなたか上記のものを作る方法について知恵をお貸しいただけませんでしょうか。

宜しくお願い致します。

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


 > x軸が作業時間、横軸が1時間刻みの時間
グラフのレイアウトがよく判りません。 x軸も横軸も、同じですよね?

それと、元データがシート上にどう並んでいるか、具体的に説明できますか? 日毎とか、人毎とかのデータが表になっているかと思いますが。
(???) 2020/03/19(木) 11:41


すみません、書き間違えてました...。
yが作業時間でxが1時間刻みになっているグラフを実装したいです。

日付、担当者名、作業開始時間、作業終了時間、実作業時間の列が並んだ行が大量にある状況です。

(tkn) 2020/03/19(木) 13:04


グラフ用の表を作ればいいだけでは?
X軸用の列とY軸用の列を用意して棒グラフにでもすれば
いいんじゃないですか
(えく) 2020/03/19(木) 13:30

>えく さん
行数が膨大なのと随時追加されていくものなので何かしら式で作りたいのです。
列を1時間ごとに作るといいかなと思うのですが、摘出の方法が分からず...。
(tkn) 2020/03/19(木) 14:07

 よーわからんけど。コレ?

[[20200305132628]] 『時間のグラフ』(ゆう)
(GobGob) 2020/03/19(木) 14:19


私の知識ではコンパクトにできませんでしたが、これでどうですか?

・日付、担当者名、作業開始時間、作業終了時間、実作業時間の列が【A:E】の範囲で
 タイトルが1行目、データが2行目からの場合

1.【F1:AC1】の範囲に「0:00〜23:00」までの行を作成
2.【F2】に=IF(FLOOR($C2,"1:00"*1)=F$1,60-MINUTE($C2),IF(FLOOR($D2,"1:00"*1)=F$1,MINUTE($D2),IF(AND(HOUR($C2)<HOUR(F$1),HOUR(F$1)<HOUR($D2)),60,"")))
3.【F2】に入れた条件式をドラッグで適用範囲に適用する

注意:作業開始・終了時間が0:00(24:00)を跨いだ場合は適用されない式です
(その) 2020/03/20(金) 08:45


事前に、棒グラフを手作業作成しておいてください。
場所は、データと同じシートです。

以下のマクロを実行すると、集計結果がグラフに反映されます。

 Sub test()
    Dim v
    Dim j As Long, k As Long
    Dim 開始 As Long, 終了 As Long
    Dim a(0 To 23) As Double
    Dim cht As Chart

    v = Cells(1).CurrentRegion.Columns("c:d").Value

    For j = 2 To UBound(v)
        開始 = Hour(v(j, 1))
        終了 = Hour(v(j, 2))

        For k = 0 To UBound(a)

            If k = 開始 Then
                a(k) = a(k) + WorksheetFunction.Min(TimeSerial(k + 1, 0, 0), v(j, 2)) - v(j, 1)
            End If

            If k > 開始 Then
                If k < 終了 Then
                    a(k) = a(k) + TimeSerial(1, 0, 0)
                End If
            End If

            If 終了 > 開始 Then
                If k = 終了 Then
                    a(k) = a(k) + v(j, 2) - TimeSerial(k, 0, 0)
                End If
            End If
        Next
    Next

    On Error Resume Next
    Set cht = ActiveSheet.ChartObjects(1).Chart
    On Error GoTo 0

    If Not cht Is Nothing Then
        cht.SeriesCollection(1).Values = a
    End If

 End Sub

(マナ) 2020/03/20(金) 15:04


修正です
 >For k = 0 To UBound(a)
     ↓
 For k = 開始 To 終了

(マナ) 2020/03/20(金) 15:34


その さん

ご回答いただきありがとうございます。
早速導入させていただきました。

2.【F2】に=IF(FLOOR($C2,"1:00"*1)=F$1,60-MINUTE($C2),IF(FLOOR($D2,"1:00"*1)=F$1,MINUTE($D2),IF(AND(HOUR($C2)<HOUR(F$1),HOUR(F$1)<HOUR($D2)),60,"")))

こちらですと例えば12:30-17:30の作業に対して13時や14時の列には60が入るべきところ、必ず30が入ってしまいます。
同様に開始が12:45などの場合は60-45の15が12時以外の列にも入力されてしまいます。
こちらをなんとか解消したいのですが良い方法はありませんでしょうか。
(tkn) 2020/03/24(火) 11:58


・日付、担当者名、作業開始時間、作業終了時間、実作業時間の列が【A:E】の範囲
・タイトルが1行目、データが2行目から
・作業開始・終了時間が0:00(24:00)を跨いでいないこと(23:30-8:30などは適用外)

上記条件で、1〜3の手順を行った場合に発生しましたか?
当方環境では、12:30-17:30の作業時間も12:45開始も問題なく表示されました。

データの情報や条件など不足していた中、載せた条件式です。
条件や手順が異なる場合は、そこに原因があるかもしれません。
(その) 2020/03/24(火) 17:00


コメント返信:

[ 一覧(最新更新順) ]


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