Excel VBA If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
IMMRです。
作成したマクロの処理時間を計測したい時ってあると思います。
例えば、下記のように処理開始ボタンを押して、
処理が完了したメッセージが表示されるまでどれくらいの
時間がかかるかを計測したい時、あなたならどのようにしますか。
処理開始のボタンを押す。
図1 ブック(処理前)
↓
↓
処理が終了して、メッセージが表示される。
図2 ブック(処理後)
処理開始ボタンを押して処理を実行し、「処理終了」と表示されるまでの時間ですが
処理内容によって時間は変わります。(当然のことですよね)
プログラムによっては、一瞬で終わるもの、数分掛かるもの、30分以上かかるもの それぞれです。
マクロの処理時間を計測する方法として、
1つは、下記のようにパソコン上で時計を表示して、「処理終了」と表示するまでの時間を計測します。
図3 ブック(時間計測)
これは、とても非効率な方法です。
これだと、何時に終了したかの確認も必要なのでずっとパソコンの前にいなくてはいけません。
そのため、もっと簡単に効率よく計測できる方法を紹介します。
マクロの処理時間を計測するしたい場合、
Timer()関数というものがあり、これを使用すると簡単に処理時間を計測出来ます。
Timer()関数は、当日0時からの経過時間を秒数で返します。
もし、16:00に実行すると57600.0という数値が返ります。
※60(秒)×60(分)×16 = 57600.0 です。
型は秒という数値なので、long、Single、Doubleなどで問題ありませんが、
0コンマ秒等精密に計測したい場合は、Single以上が必要です。
ストップウォッチのように時間を計測するのではなく、
処理開始時のTimer
処理終了時のTimer
を計測して、
Timer(処理終了時) ー Timer(処理開始時) = 処理にかかった時間
という形で計測します。
図4 Timerを使っての処理時間を計測する方法
処理時間を計測するサンプルコードは以下になります。
サンプルコード
Private Sub CommandButton1_Click()
Dim Syo_Time As Single
Syo_Time = Timer
MsgBox Timer - Syo_Time & " かかりました。"
End Sub
まず、処理開始する前、syo_Time(変数)にTimerの値をセットします。
処理が完了したら再び、Timerの値を取得して、先ほど取得したsyo_Time(変数)との差を調べます。
この差が処理時間になります。
※ボタンを使用しているので、プロシージャー名が「Private Sub CommandButton1_Click()」になっています。
では、ボタンを作成してから
上記、コードを記載し、処理時間が計測できるか実行して確認してみます。
図5 ブック(処理前)
↓
↓ボタンを押して、しばらく待つと
↓
下記のように処理にかかった時間が表示されます。
図6 ブック(上記、コード実行後)
この処理では、約293秒と表示されました。
つまり、処理時間は、4分53秒かかったことになります。
処理時間が正しく計測出来ていることが確認出来ます。
【著者】
今まではExcel VBAの開発をしてきました。
開発を主にしたものや他の業務の効率化を目指して行ったものさまざまです。
現在は、他のプログラミング言語に挑戦して、スキルアップを目指しています。