ExcelVBAシステムは、お使いのWindowsPCのスペックにより処理スピードも変化します。
みなさん、こんにちは。セルネッツ竹本です。
今回は、「処理スピードを評価する時間の計測」をテーマに、2種類の実測方法を解説をしたいと思います。
◆実測スピードを意識することは重要です。
ExcelVBAシステムは、基本Excelアプリケーション上でしか動作しません。
また、プログラムの処理スピードは、皆さんが普段おつかいのパソコンの性能(特にCPU)に依存します。
このため、同じ大量データでも、AさんとBさんは大きな差が生じることもあるのです。
その速度が妥当かどうかは、たとえば、重いサイズのExcelブックをOpenする処理でもわかります。
手で開いたら20秒かかる重いブックは、物理的に20秒を要する、ということです。
時間、処理スピードに対する意識は、システム開発をしているプログラマーであれば、いかに高速なプログラムにできるか、日々、切磋琢磨していることと思います。
今回は、はじめに、GetTickCount関数を使ってみます。1,000ミリ秒の精度が得られます。
◆ファイルOpenを例に実際にテストしてみることをお勧めします
以下は、Call元です。
“開始”なのか、“終了”なのかをパラメータ指定し、それぞれ別の変数に格納し、その“差異”を求めるだけです。
'時間の計測 開く直前
Call M_時間計測("開始", P_TimeStart, P_TimeEnd)
'ここで開きます
Workbooks.Open filename:=P_FullPath
'時間の計測 開いた直後
Call M_時間計測("終了", P_TimeStart, P_TimeEnd)
以下がCallされます。
Public P_TimeStart As Variant
Public P_TimeEnd As Variant
‘+++++++++++++++++++++++++++++++++++
Sub M_時間計測(S_status As String, P_TimeStart, P_TimeEnd)
‘+++++++++++++++++++++++++++++++++++
If S_status = "開始" Then
'開始時間の取得
P_TimeStart = GetTickCount
ElseIf S_status = "終了" Then
'終了時間の取得
P_TimeEnd = (GetTickCount - P_TimeStart) / 1000
End If
End Sub
精度の高い計測ならこっちですが・・・。実用的なのは、次の計測が良いでしょう。
◆処理にかかった全体のスピードなら「秒単位の計測」で十分
通常、プログラムでは、複数の処理が実行されるので、【処理にかかった時間】を取得するには、以下の記述で計測できます。
'[開始時刻]を、Public型の変数に格納 全Module共通のため
P_Time始 = Timer
'(いろんな処理・・・・)
'[終了時刻] - [開始時刻] = 実測(秒数)
MsgBox "---------------------------------" & vbCrLf & _
"■開いたファイル名:xxxxxx.xlsx" & vbCrLf & _
"--------------------------------" & vbCrLf & vbCrLf & _
"※処理時間: " & Int(Timer - P_Time始) & " 秒", , "完了"
月の集計レポートを作成したり、シンプル機能の処理なら「数秒」というのが多いですが、大量ファイルを順次処理する場合は、1ファイルにかかる時間が見えてきます。
1.処理中のファイル名
2.処理中のファイル数 / 全体のファイル数
3.現在の経過時間
上記をステータスバーで表示することで、ユーザの不安はだいぶ軽減されるので、UserFormも習得すると利便性がさらにアップしますね。
今回のテーマは、「フ処理スピードを評価する時間の計測」について、解説を行いました。
本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。