【VBA入門】ファイルOpenに何秒かかるか。処理速度を計測し実測を評価する

【VBA入門】ファイルOpenに何秒かかるか。処理速度を計測し実測を評価する

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実務の効率化において、ご参考お役立てになれば幸いです。


全国対応!お気軽にお問い合わせください