Excel VBA質問箱 IV

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

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


43576 / 76732 ←次へ | 前へ→

【38203】Re:時間帯別利用率の算出
発言  sin  - 06/5/29(月) 17:44 -

引用なし
パスワード
   ▼ハト さん:
ありがとうございます。


>このやり方ですと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の値が正しく設定されません


ご指摘通りイタい間違いでした。
↓の様にしてみました。


'時系列に並べ替え
  Dim EDate As Date
  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
      
      If EDate < BDate(j, 2) Then
        EDate = BDate(j, 2)
      End If
    Next j
  Next i

  MDate = DateDiff("d", BDate(2, 1), EDate)

さらに冗長になってしまった・・・


>あと、ソートは
>日時をエクセル上に作業列として書き出し、
>エクセルのソート機能(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

言われてみると確かにマヌケな事してました。^^;


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

いえいえ、勉強になりました、ありがとうございました。
これからも宜しくお願いします。
(記事番号【37734】の時もお世話になりました)


※「投稿種別」はスレ主ではないので、あえて「お礼」ではなく
 「発言」にしておきました。
 気持ちは「お礼」なのですが・・・


1 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 お礼

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