|
こんにちは、ちんといいます。
補足です。
答えのタイムチャートを表示するとき、
9時から18時まで表示すれば良いとおもうので、
以下の※印を参考にして下さい。
(MID命令で、9時〜18時までのタイムチャートをC列にセット)
以上、
▼ちん さん:
>sこー さん こんにちは、ちんといいます。
>タイムチャートで考えてみましょう。
>C列を時間の確認ように使用しますので、属性:文字列にします。
>
>考え方は、
>午前0時〜24時までの横線(一本線)を引いて下さい。
>0時10分から、10分刻みで縦線を23時50分まで引きましょう。
>-----1-----2-----3-----4 ・・・ と、いうように。
>例として、開始時間1:00〜終了時間2時30までの実績時間を求めるとしたら、
>-----*********---3-----4 ・・・
>というふうに、10分刻みで"*"マークに置き換えます。(*はダブリ防止用)
>
>というふうに、ロジックを考えると、以下のようになります。
>
>Sub ボタン1_Click()
> Dim C_bar As String
> Dim i1 As Long, i2 As Integer
> Dim Fun_bar As Integer
> Dim Fun As Integer '<-- 10分単位の個数
>
> For i1 = 1 To 23
> C_bar = C_bar + "-----" + Right$(Format(i1, "00"), 1)
> Next i1
> For i1 = 1 To 4
> a = DateDiff("n", Cells(i1, 1).Value, Cells(i1, 2).Value)
> GoSub Time_chart
> Next i1
>
> MsgBox (Fun * 10) & "分作業しました。"
> Cells(10, 10).Value = C_bar
※ 上記の行は、不要でした。
> Exit Sub
>
>Time_chart:
> Fun_bar = a / 10 '<-- 10分単位で 1とする。(20分なら2となる)
> b = DateDiff("n", "0:00", Cells(i1, 1).Value) '<-- "*"を書き込む位置の計算
> For i2 = (b / 10) To (b / 10) + (Fun_bar - 1)
> If Mid(C_bar, i2, 1) <> "*" Then '<-- ダブリのチェック
> Fun = Fun + 1 '<-- 10分単位の個数を数える
> Mid(C_bar, i2, 1) = "*"
> End If
> Next i2
> Cells(i1, 3).Value = C_bar
※ Cells(10, 10).Value = Mid(C_bar, 54, 55) '<---MID命令で、9時〜18時
> Return
>
>End Sub
>
>以上参考までに、
>
>▼sこー さん:
>>皆様こんばんは。いつもいつもありがとうございます。
>>
>>この度、会社で外にでている時間帯を計算する事になったのですが、
>>2人以上いると重なってしまう時間帯がでてきまして、
>>その処理をどうすればよいのかわからず悩んでいます。
>>
>>
>> A B
>>1 9:30 10:30 ・・・・・・・(60分)
>>2 11:40 12:30 ・・・・・・・(50分)
>>3 12:00 12:40 ・・・・・・・(40分)
>>4 13:00 13:50 ・・・・・・・(50分)
>>
>>
>>Bの時間からAの時間を引き、最後に合計する為に
>>
>>a = DateDiff("n", Range("a1"), Range("b1"))
>>
>>で引き算し、forで1〜4行を計算し、合計を出したいのですが、
>>そのまま計算してしまうと全ての合計時間の200分と表示されます。
>>実際には2行目と3行目は時間帯が重なっており、11:40〜12:40なので60分、
>>実際の合計時間は170分になりますよね。
>>重なりを除去して合計できるような事は可能でしょうか?
>>
>>さらにここに
>>
>>5 9:00 14:00 ・・・・・・・(300分)
>>
>>と追加されれば、1〜4行をすべてカウントせず5行目だけの合計を出さなければならず、不勉強の私には考えつかない為、セルに色々計算式をいれて間違いだらけになりながらも、どうにか現状をしのいでおります。
>>
>>皆様、どうか良い方法があれば、ご教授ください。
>>どうぞ、よろしくお願い致します.
|
|