Excel VBA質問箱 IV

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

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


43581 / 76732 ←次へ | 前へ→

【38198】Re:時間帯別利用率の算出
発言  ハト  - 06/5/29(月) 15:16 -

引用なし
パスワード
   おはようございます

▼sin さん:
>横から失礼します。
>
>▼ハト さん:
>お手本のようなスマートなやり方に感心しました。
>勉強になります。

ありがとうございます。
でも自分もまだまだ勉強中です(^^;

>ところで、
>>        ElseIf j = OnDate And k = OnTime Then
>>          TM = Minute(ws.Cells(i, 4))
>は
>          Tm = 60 - Minute(ws.Cells(i, 4))
>にしないと開始利用時間が合わないのでは?

申し訳ありません、おっしゃる通り自分のミスです。
          TM = 60 - Minute(ws.Cells(i, 4))
です
お恥ずかしい(^^;


>'行ごとにON日付/時刻、OFF日付/時刻を日付型配列に格納
>  For i = 2 To ed
>    BDate(i, 1) = CDate(CDate(Cells(i, 3)) & " " & CDate(Cells(i, 4)))
>    BDate(i, 2) = CDate(CDate(Cells(i, 5)) & " " & CDate(Cells(i, 6)))
>  Next i
>
>'時系列に並べ替え
>  For i = 2 To ed
>    For j = i + 1 To ed
>      If BDate(i, 1) > BDate(j, 1) Then
>        TDate = BDate(i, 1)
>        BDate(i, 1) = BDate(j, 1)
>        BDate(j, 1) = TDate
>        
>        TDate = BDate(i, 2)
>        BDate(i, 2) = BDate(j, 2)
>        BDate(j, 2) = TDate
>      End If
>    Next j
>  Next i
>
>  MDate = DateDiff("d", BDate(2, 1), BDate(ed, 2))

このやり方ですとMDateの算出に問題があります

     ON        OFF
2006/05/28 21:00   2006/05/28 23:30
2006/05/28 22:00   2006/05/29 01:00
2006/05/28 22:30   2006/05/28 23:00

のようなデータの場合、ONの日時はソートされても
OFFの日時はソートされていないのでにMDateの値が正しく設定されません

あと、ソートは
日時をエクセル上に作業列として書き出し、
エクセルのソート機能(Range.Sort)を使った後、配列に入れる方法もあります


>'日付/時間帯ごとに集計
うーん、アドバイスって程の物じゃないですが

DateAdd("h", j, TDate)
DateAdd("h", j + 1, TDate)

の2つが何度も出てきますんで
    
>    For j = 0 To 23
>      Tm = 0
      DateA = DateAdd("h", j, TDate)
      DateB = DateAdd("h", j + 1, TDate)

と変数に代入し、↓のような部分を
>      Do Until BDate(k, 1) >= DateAdd("h", j + 1, TDate)
>        If BDate(k, 2) > DateAdd("h", j, TDate) Then

↓の様にした方がすっきりするかな?
      Do Until BDate(k, 1) >= DateB
        If BDate(k, 2) > DateA Then

あと↓は
>      k = m
>
>      Do Until BDate(m, 2) >= DateAdd("h", j + 1, TDate) Or m = ed
>        k = m + 1
>        m = m + 1
>      Loop

↓の様にしましょう
      Do Until BDate(m, 2) >= DateAdd("h", j + 1, TDate) Or m = ed
        m = m + 1
      Loop

      k = m

アドバイスらしくなくて申し訳ないです
0 hits

【38087】時間帯別利用率の算出 あい 06/5/26(金) 9:38 質問
【38094】Re:時間帯別利用率の算出 lespoir2 06/5/26(金) 10:40 回答
【38095】Re:時間帯別利用率の算出 neptune 06/5/26(金) 10:44 発言
【38102】Re:時間帯別利用率の算出 あい 06/5/26(金) 13:26 発言
【38106】Re:時間帯別利用率の算出 neptune 06/5/26(金) 14:47 回答
【38101】Re:時間帯別利用率の算出 あい 06/5/26(金) 13:23 質問
【38103】Re:時間帯別利用率の算出 M 06/5/26(金) 14:06 発言
【38110】Re:時間帯別利用率の算出 Kein 06/5/26(金) 16:04 回答
【38107】Re:時間帯別利用率の算出 ハト 06/5/26(金) 14:50 回答
【38181】Re:時間帯別利用率の算出 sin 06/5/29(月) 12:09 発言
【38198】Re:時間帯別利用率の算出 ハト 06/5/29(月) 15:16 発言
【38203】Re:時間帯別利用率の算出 sin 06/5/29(月) 17:44 発言
【38204】Re:時間帯別利用率の算出 あい 06/5/29(月) 17:50 お礼
【38108】Re:時間帯別利用率の算出 再送 ichinose 06/5/26(金) 14:59 発言
【38109】Re:時間帯別利用率の算出 再送 追伸 ichinose 06/5/26(金) 15:09 発言
【38205】Re:時間帯別利用率の算出 再送 あい 06/5/29(月) 17:52 お礼

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