Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


67890 / 76738 ←次へ | 前へ→

【13398】Re:時間帯の重なり除去
回答  ちん  - 04/5/4(火) 13:29 -

引用なし
パスワード
   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
 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行目だけの合計を出さなければならず、不勉強の私には考えつかない為、セルに色々計算式をいれて間違いだらけになりながらも、どうにか現状をしのいでおります。
>
>皆様、どうか良い方法があれば、ご教授ください。
>どうぞ、よろしくお願い致します.

0 hits

【13332】時間帯の重なり除去 sこー 04/5/1(土) 20:27 質問
【13337】Re:時間帯の重なり除去 bykin 04/5/2(日) 12:12 回答
【13351】Re:時間帯の重なり除去 sこー 04/5/2(日) 21:23 質問
【13398】Re:時間帯の重なり除去 ちん 04/5/4(火) 13:29 回答
【13399】Re:時間帯の重なり除去 ちん 04/5/4(火) 13:57 発言
【13577】Re:時間帯の重なり除去 sこー 04/5/7(金) 23:42 お礼
【13404】Re:時間帯の重なり除去 Hirofumi 04/5/4(火) 16:21 回答

67890 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free