この記事では、VBAマクロで処理時間の計測(秒:ミリ秒:時分秒:サンプル:分:timer)方法【Timer関数、DateAdd関数、Format関数】について解説します。
ポイントとしては
Timer関数、
DateAdd関数、
Format関数
を使用することです。
この解説は初心者にもわかりやすいように、変数名を少し変わった日本語ローマ字表記で示しています。
あなた自身が使う際には、これを適切な英語表記に変更してご活用ください。
それでは、詳しく見ていきましょう!
VBAマクロで処理時間の計測(秒+ミリ秒表記で:サンプル付)方法
それではまず、秒+ミリ秒で処理時間を計測する方法について解説していきます。
このサンプルでは、1シートのすべての各列の合計を最終行の次に表示させ、その後にファイルを上書き保存する時間を計測します。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub SekiMiriKei()
Dim kaishiJikan As Double
Dim owariJikan As Double
Dim keikaJikan As Double
Dim i As Integer
Dim retsuMax As Integer
Dim gyoMax As Integer
Dim goukei As Double
kaishiJikan = Timer
retsuMax = ActiveSheet.UsedRange.Columns.Count
gyoMax = ActiveSheet.UsedRange.Rows.Count
For i = 1 To retsuMax
goukei = Application.WorksheetFunction.Sum(ActiveSheet.Columns(i))
ActiveSheet.Cells(gyoMax + 1, i).Value = goukei
Next i
ActiveWorkbook.Save
owariJikan = Timer
keikaJikan = owariJikan - kaishiJikan
MsgBox "処理時間は " & Format(keikaJikan, "0.000") & " 秒です。", vbInformation
End Sub
コードのAlt+F8を押し、マクロ選択画面で関数名を実行します。
このコードでは、処理開始時刻と終了時刻を取得し、その差で処理時間を計算します。
Timer関数を使用しています。
VBAマクロで処理時間の計測(分表記で:サンプル付)方法
続いては、分表記で処理時間を計測する方法について解説していきます。
このサンプルでは、指定ディレクトリのExcelファイルすべてを別のディレクトリにコピーし、
その後、これらのファイルを1ブック1シートに縦方向に結合させる処理の時間を計測します。
Sub FunKei()
Dim kaishiJikan As Date
Dim owariJikan As Date
Dim keikaJikan As Long
Dim sourceFolder As String, targetFolder As String
Dim file As String, targetFile As String
Dim wb As Workbook, ws As Worksheet
Dim lastRow As Long
kaishiJikan = Now
sourceFolder = "C:\SourceFolder\" ' ソースフォルダのパス
targetFolder = "C:\TargetFolder\" ' ターゲットフォルダのパス
file = Dir(sourceFolder & "*.xlsx")
Do While file <> ""
FileCopy sourceFolder & file, targetFolder & file
file = Dir
Loop
file = Dir(targetFolder & "*.xlsx")
Set wb = Workbooks.Add
Set ws = wb.Sheets(1)
Do While file <> ""
With Workbooks.Open(targetFolder & file)
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
.Sheets(1).UsedRange.Copy ws.Cells(lastRow, 1)
.Close False
End With
file = Dir
Loop
wb.SaveAs targetFolder & "Merged.xlsx"
wb.Close False
owariJikan = Now
keikaJikan = DateDiff("n", kaishiJikan, owariJikan)
MsgBox "処理時間は " & keikaJikan & " 分です。", vbInformation
End Sub
コードのAlt+F8を押し、マクロ選択画面で関数名を実行します。
この処理では、DateAdd関数を使用して、開始時間と終了時間の差を分で表示します。
VBAマクロで処理時間の計測(時分秒の表記で:サンプル付)方法
最後に、時分秒で処理時間を計測する方法について解説します。
これも前述のサンプルと同様の処理内容ですが、時間の表示方法が時分秒と異なります。
Sub JikanKei()
Dim kaishiJikan As Date
Dim owariJikan As Date
Dim keikaJikan As String
Dim sourceFolder As String, targetFolder As String
Dim file As String, targetFile As String
Dim wb As Workbook, ws As Worksheet
Dim lastRow As Long
kaishiJikan = Now
sourceFolder = "C:\SourceFolder\" ' ソースフォルダのパス
targetFolder = "C:\TargetFolder\" ' ターゲットフォルダのパス
file = Dir(sourceFolder & "*.xlsx")
Do While file <> ""
FileCopy sourceFolder & file, targetFolder & file
file = Dir
Loop
file = Dir(targetFolder & "*.xlsx")
Set wb = Workbooks.Add
Set ws = wb.Sheets(1)
Do While file <> ""
With Workbooks.Open(targetFolder & file)
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
.Sheets(1).UsedRange.Copy ws.Cells(lastRow, 1)
.Close False
End With
file = Dir
Loop
wb.SaveAs targetFolder & "Merged.xlsx"
wb.Close False
owariJikan = Now
keikaJikan = Format((owariJikan - kaishiJikan), "hh:nn:ss")
MsgBox "処理時間は " & keikaJikan & " です。", vbInformation
End Sub
コードのAlt+F8を押し、マクロ選択画面で関数名を実行します。この処理では、Format関数を使用して、開始時間と終了時間の差を時分秒で表示します。
まとめ VBAマクロで処理時間の計測(時分秒:サンプル:timer:時間分)方法
この記事では、ExcelのVBAマクロを使って処理時間を計測する方法を、具体的なサンプルコードを通して紹介しました。
これらのコードは基本的な構造を示していますが、実際の用途に合わせて適宜変更する必要があります。
VBAを使用することで、処理時間の計測や最適化に役立つ情報を得ることができます。是非、これらのサンプルを活用して、自分のプロジェクトに適用してみてください。