70本目 ステータスバーに1秒ごとに時刻を表示

VBA100本ノック

VBA100本ノック 70本目を動画で解説しています。Excelの神髄さんの模範解答はコチラ


問題

#VBA100本ノック70本目
ブックが開かれたら、自動的にステータスバーに1秒ごとに時刻が表示されるようにしてください。
ただし、1分後には時刻表示を終了してください。
※セル入力中は、時刻は更新されなくて構いません。

解答

Private Sub Workbook_Open()
    Call ステータスバーに現在の時刻を表示
End Sub

Sub ステータスバーに現在の時刻を表示()

    Application.StatusBar = Format(Now(), "hh:mm:ss")
    
    Dim 今の時刻, 終了時刻
    今の時刻 = Format(Now(), "hh:mm:ss")
    終了時刻 = DateAdd("s", 60, Now())
    
    Do While Now() <= 終了時刻 '60秒経ったら終わる
        Do While Format(Now(), "hh:mm:ss") = 今の時刻
            DoEvents   'セルに入力可能にする
        Loop
        Application.StatusBar = Format(Now(), "hh:mm:ss")
        今の時刻 = Format(Now(), "hh:mm:ss")
    Loop
    
    Application.StatusBar = "終了したよ"
    
End Sub

■考え方・流れ
0:00 冒頭・問題確認

ちなみにステータスバーってのはココ↓w

新人君
新人君

ステータスバーなんて
初めて使いますね!

ブチョ
ブチョ

俺は毎日使ってるけど?

新人君
新人君

ホントか…?

ブック起動時にステータスバーに時刻を表示

さて!じゃあまずは…
ブック起動時にステータスバーに現在時刻を表示していくぞ!!

必要な情報はこんな感じ!!!↓

ブックモジュールを開いたら…
お次はここ!!

ここをWorkbookに変更したら、自動でOpenイベントが入ってくれるぞ!!

そしたら今回は、別のプロシージャを作って、
その中に「ステータスバーに時刻を表示」するコードを書いていこう!!

その方がデバッグとか簡単にできるからね!

お次!ステータスバーの方のプロシージャ!!

Application.StatusBarプロパティさんに、”=”を使って現在時刻を代入!!

実行結果↓

1秒おきにステータスバーを更新

よし!そしたらお次!
「1秒おき」にステータスバーを更新したいんだけど…

実は…これが結構難しいんスわ!

理由↓

これを可能にするためには…
Do Loopさんの中に、「Do Events」ってのを入れてあげりゃいいんスわ!↓

Do Eventsって何かって言うと…
「発生したイベントがオペレーティングシステムによって処理されるように制御を戻します」
って公式に乗ってるんだけど…wwなんじゃそりゃって話。

深くは考えなくていいぞ!!たぶんww
時間のかかるマクロとか、ループ中にExcelを操作したい時とか…
ゲームを作りたい時とか…そんな時に使うかな!

終了時刻を決める

よし!じゃあ最後に!
60秒経ったら終了するようなコードにして終わりにするぞ!!
一旦、ループの開始前とループ中に、ステータスバーを更新するコードに変更して…

ココを、条件を満たすまでループに変更してあげりゃOK!

終了時刻って変数を作って、むかーし使った
DateAdd関数さんで求めてあげて…

Do While Loopさんに変更すればOK!!

Do While 条件式 で 条件を満たす間はずっとループさせてあげよう!

実行結果↓

終わりだよーーん!!

ブチョ
ブチョ

お疲れさま!

新人君
新人君

お疲れさまでした!

あとがたり

おはこんばんちは。uぷ主です。
70本目、1秒おきにステータスバーを更新する問題でした…

いやぁ~、「セル編集中には…」の条件がなければ、余裕だったんですけどね…
まあでも実際、ステータスバーを更新するマクロを作って、
その間Excelで何も作業できない!なんてこと…実務でありえないかwww

勉強なりますw

あ、てか話はそれて…
どうでもいいんですけど…
昨日、胃炎???かなんかで一日うずくまってましたww

まーーーじできつかった。
身体の内部の異常ってマジでしんどくないっすか??ww

最近、夜寝れてなくて、ストレス???かなーー?

体調整えないとな…!
昨日は色んな人にも迷惑かけたんで、気を付けます。

コメント

タイトルとURLをコピーしました