Excelスキルアップコレクション
           〜 Something U Want 〜


Google  

WWW を検索
Excelスキルアップコレクション内 を検索
 @     Top  >     Excel VBA スキルアップコレクション Topics  >     (08) 時間の差分をミリ秒単位で計算する

 
(08) 時間の差分をミリ秒単位で計算する

 プログラムの処理時間を計測したい場合には、Now() 関数とDateDiff() 関数でDate型のデータの差分を求めればよいと、「(07) 時間の差分を計算する」で紹介しました。しかし、処理時間が1秒未満の場合であっても、処理時間が「0秒」と表示されないように、ミリ秒単位で処理時間を計測したい場合があります。

 ここでは、ミリ秒単位で処理時間を計測する特殊な方法を紹介します。

 下記サンプルコードは、Excelのセル"A1"〜"A65536"の範囲に、Excel関数のRow() 関数を記載する処理の実行時間を計算するサンプルです。

 1行目:  ' *
 2行目:  ' * ミリ秒単位を扱う
 3行目:  ' *
 4行目:  Declare Function GetTickCount Lib "KERNEL32.DLL" () As Long
 5行目:  
 6行目:  Public Sub Sample_MilliSec_01()
 7行目:  
 8行目:      ' 画面更新を抑止する。
 9行目:      Application.ScreenUpdating = False
10行目:  
11行目:      Dim StartTime As Long
12行目:      ' プログラム実行と同時に、現時間をLong型で取得する。
13行目:      StartTime = GetTickCount
14行目:      
15行目:      ' セル"A1"〜"A65536"まで"=Row()"を記載する。
16行目:      Dim lp As Long
17行目:      For lp = 1 To 65536
18行目:          Range("A1").Offset(lp - 1, 0).Formula = "=Row()"
19行目:      Next
20行目:  
21行目:      ' プログラム開始時の時間と終了時間の差分をミリ秒単位で計算する。
22行目:      MsgBox (GetTickCount - StartTime) & "[ミリ秒]"
23行目:      
24行目:      ' 画面更新を再開する。
25行目:      Application.ScreenUpdating = True
26行目:      
27行目:  End Sub
このサンプルコードを実行すると、以下の結果が返ってきます。
ここでは、Win32 APIを利用して、処理の先頭と最後でGetTickCount() 関数を用いて時間をLong型の数値として取得し、その時間の差分を計算しています。
ページの先頭へ