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
最近、夜寝れてなくて、ストレス???かなーー?
体調整えないとな…!
昨日は色んな人にも迷惑かけたんで、気を付けます。
コメント