Excel VBA質問箱 IV

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

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


6051 / 13646 ツリー ←次へ | 前へ→

【47427】時間の計算について たいやきの頭 07/3/9(金) 17:00 質問[未読]
【47429】Re:時間の計算について ウッシ 07/3/9(金) 17:08 回答[未読]
【47430】Re:時間の計算について Kein 07/3/9(金) 17:09 発言[未読]
【47431】Re:時間の計算について たいやきの頭 07/3/9(金) 17:12 質問[未読]
【47432】Re:時間の計算について neptune 07/3/9(金) 17:32 回答[未読]
【47434】Re:時間の計算について Kein 07/3/9(金) 17:38 発言[未読]
【47435】Re:時間の計算について ウッシ 07/3/9(金) 17:50 発言[未読]
【47468】Re:時間の計算について たいやきの頭 07/3/11(日) 19:31 発言[未読]
【47469】Re:時間の計算について りん 07/3/11(日) 20:23 回答[未読]
【47480】Re:時間の計算について たいやきの頭 07/3/12(月) 9:21 お礼[未読]
【47488】Re:時間の計算について りん 07/3/12(月) 12:10 発言[未読]

【47427】時間の計算について
質問  たいやきの頭  - 07/3/9(金) 17:00 -

引用なし
パスワード
   処理がどのぐらい後に終わるかを表示しようと思って、
For i = 1 To 10
  taimu(1) = Hour(Time)
  taimu(2) = Minute(Time)
  taimu(3) = Second(Time)
  ActiveWindow.Caption = i
  DoEvents
  For a = 1 To 99999
    DoEvents
  Next a
  g = 10 - i
  Debug.Print "後 " & DateDiff("h", taimu(1) * g, Hour(Time)) & "時間" & DateDiff("n", taimu(2) * g, Minute(Time)) & "分" & DateDiff("s", taimu(3) * g, Second(Time)) & "秒後です"
Next i
というコードをくんだのですが、
めちゃくちゃな値が出てくるのですが、なぜなんでしょうか?
誰か詳しい方教えてください。

【47429】Re:時間の計算について
回答  ウッシ  - 07/3/9(金) 17:08 -

引用なし
パスワード
   こんにちは

何故かは見てないですけど、よくあるのは

Sub test()
  Dim a As Long
  Dim s As Single
  s = Timer
  For a = 1 To 99999
    DoEvents
  Next a
  Debug.Print Timer - s
End Sub

です。

【47430】Re:時間の計算について
発言  Kein  - 07/3/9(金) 17:09 -

引用なし
パスワード
   処理時間を計測する方法はいくつかありますが、簡単なものでよければ
Timer関数が使えます。Timer をキーワードにして過去ログを検索して
みて下さい。記事番号 36758 には拙作のサンプルもあります。

【47431】Re:時間の計算について
質問  たいやきの頭  - 07/3/9(金) 17:12 -

引用なし
パスワード
   Timerの使い方はしっているのですが、
今回は、時間と分もほしいんです。
なんか方法ありませんか?

【47432】Re:時間の計算について
回答  neptune  - 07/3/9(金) 17:32 -

引用なし
パスワード
   ▼たいやきの頭 さん:
こんにちは

多分ですが、
>For i = 1 To 10
  '処理してないのに時間を取り入れている----A
>  taimu(1) = Hour(Time)
>  taimu(2) = Minute(Time)
>  taimu(3) = Second(Time)
>  ActiveWindow.Caption = i
>  DoEvents
>  For a = 1 To 99999
>    DoEvents
>  Next a
>  g = 10 - i
  'Aの時間を使用しても無意味じゃないでしょうか?debug.printの計算方法
   をもう一度考えてみては?
>  Debug.Print "後 " & DateDiff("h", taimu(1) * g, Hour(Time)) & "時間" & DateDiff("n", taimu(2) * g, Minute(Time)) & "分" & DateDiff("s", taimu(3) * g, Second(Time)) & "秒後です"
>Next i

【47434】Re:時間の計算について
発言  Kein  - 07/3/9(金) 17:38 -

引用なし
パスワード
   Win32APIを使うと、もっと正確に計測できそうです。

Public Declare Function timeGetTime Lib "winmm.dll" () As Long

Sub TM_Test()
 nStart = timeGetTime()
 For i = 0 To 1000000000
 Next
 nEnd = timeGetTime
 MsgBox (CDbl(nEnd) - CDbl(nStart)) / 1000 & " 秒"
End Sub

秒数の算出が分かれば、後はできると思いますが。

【47435】Re:時間の計算について
発言  ウッシ  - 07/3/9(金) 17:50 -

引用なし
パスワード
   こんにちは

なんとなく、

経過時間ではなくて残り時間を表示するのは難しいのでは?
処理データ件数とトータル処理時間とかが分かっていれば別ですけど。

(たぶん・・・結局処理時間は短縮出来なかったんですね。)

【47468】Re:時間の計算について
発言  たいやきの頭  - 07/3/11(日) 19:31 -

引用なし
パスワード
   返信遅くなり申し訳ございません。
処理件数はわかってはいるんです。
なので一度LOOPを通って出てきたらその時間を計測して
それを元に残りの処理時間を計算し、表示させたいと思っているんです。

【47469】Re:時間の計算について
回答  りん E-MAIL  - 07/3/11(日) 20:23 -

引用なし
パスワード
   たいやきの頭 さん、こんばんわ。

>処理件数はわかってはいるんです。
>なので一度LOOPを通って出てきたらその時間を計測して
>それを元に残りの処理時間を計算し、表示させたいと思っているんです。

1回あたりの経過時間から終了時間を予測してみます。
Sub test()
  Dim t1 As Double, t2 As Double
  t1 = Now
  imax = 10
  For i = 1 To imax
   For a = 1 To 99999
     DoEvents '適当に時間のかかる処理
   Next a
   '
   t2 = Now
   Debug.Print i & "/"; imax & " 残り(およそ) " & Format(((t2 - t1) / i) * (10 - i), "hh時間mm分ss秒")
  Next i
End Sub

こんな感じです。

【47480】Re:時間の計算について
お礼  たいやきの頭  - 07/3/12(月) 9:21 -

引用なし
パスワード
   おぉ〜!!できました。
教えてくださった方々ありがとうございました

【47488】Re:時間の計算について
発言  りん E-MAIL  - 07/3/12(月) 12:10 -

引用なし
パスワード
   たいやきの頭 さん、こんにちわ。

>おぉ〜!!できました。
>教えてくださった方々ありがとうございました

Sub test()
  Dim t1 As Double, t2 As Double
  t1 = Now
  imax = 10
  For i = 1 To imax
   For a = 1 To 99999
     DoEvents '適当に時間のかかる処理
   Next a
   '
   t2 = Now
   Debug.Print i & "/"; imax & " 残り(およそ) " & Format(((t2 - t1) / i) * (imax - i), "hh時間mm分ss秒")
  Next i
End Sub

結果表示のところが間違っていたので、訂正します。
10 → imax でした。

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