[[20170513092930]] 『Timer関数についての疑問』(外部コーチ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Timer関数についての疑問』(外部コーチ)

お世話になります。

前回[20170424163511]の質問で私の未熟さから少し問題が生じた為、今回の質問の仕方に何か不手際が御座いましたら、ご指摘をお願いします。

前回の質問に関係する事なのですが、プログラムの意味の理解に悩んでいます。
現在ランダムに文字を表示する所までは出来たのですが、プログラムのなかで

 If (Timer - ts) >= intervalSec Then

 ts = Timer

となるコードが出てきます。私が解釈している意味は

 もし(Timer - ts)が intervalSec(指定時間 1秒) 以上ならば・・・ と、

 ts = Timer は ts に Timer を代入

です。

ここで出てくる2つの Timer ですが

If の後の Timer は現在の経過時間で

ts = Timer の Timer は代入された時の経過時間

これが If の条件を満たしたとき次の処理に向かう

という解釈で宜しいのでしょうか?
大変くだらない質問で申し訳ありませんが、ご教授宜しくお願いします。

はじめは

 ts = Timer は ts に Timer を代入 だから
 If (Timer - ts) >= intervalSec Then だと
 If (Timer - Timer) >= intervalSec Then になり
 (Timer - Timer) は常に 0 になってしまうのでは・・・ と考えていました。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


それでよいと思います
 Option Explicit

 Sub test()
    Dim ts As Single

    MsgBox ts
    ts = Timer
    MsgBox ts & vbLf & Timer
    MsgBox ts & vbLf & Timer
    MsgBox ts & vbLf & Timer
    MsgBox ts & vbLf & Timer

    ts = Timer
    MsgBox ts & vbLf & Timer
    MsgBox ts & vbLf & Timer

 End Sub

(マナ) 2017/05/13(土) 10:39


予備知識として、Timer関数は0時からの経過時間が得られます。なので、0時をまたいだ場合は計算結果が負になってしまうことを覚えておいてください。(今回やろうとしている事はトレーニング用なので、0時に使われる事は無いと思いますが)

また、前回この関数ではなく、1秒単位のOnTimeを教えたのは、時間経過を待つ間にCPUをなるべく使わない(無駄な資源を使わない)ようにするためです。OnTimeだと、時間がきたらコードが動いてCPUを使いますが、Timer関数やAPIのSleep関数では、めいっぱいCPUを使ってしまいます。タスクマネージャでパフォーマンスを見ながらマクロを動かしてみると、違いが判る事でしょう。
(???) 2017/05/13(土) 11:08


(マナ)さん
 ご回答有難う御座います。

MsgBoxで、0 から始まり OK クリックで起動時の Timer時間 表示。さらに OK クリックで起動時と現在の Timer時間 を表示。5回目クリックで ts = Timer の上書きと Timer時間 表示。最後に上書き時と現在の Timer時間 を表示。 vbLf はセル内改行。

という事ですね。
とても丁寧なご解説有難う御座いました。

(???)さん
 前回の質問に引き続きご回答有難う御座います。

前回のご教授にもありましたので初めは OnTime で調べていたのですが調べている工程の中で Timer関数 に自然とシフトしてしまいこの形でのプログラムになってしまいました。また、「CPUをなるべく使わない」というご指摘には大賛成なのですが、表示時間等に使いたいので1秒未満の表示にも対応しておいた方が都合が良さそうでした。ある程度プログラムが出来ましたら一度お目通し頂きたいと思いますので宜しくお願いします。まだまだ先は長そうです。
 
(外部コーチ) 2017/05/13(土) 14:47


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.