Attribute VB_Name = "Module1" Option Explicit ' Sub 実行速度試験() Dim Sh As Worksheet Dim Rg As Range Dim MyRange As Range Dim MyStr As String Dim MyObj As Range Dim String型値 As String Dim Variant型値 As Variant Dim lRow As Long Dim lCol As Long Dim lMaxRow As Long Dim lMaxCol As Long Dim VariantAry As Variant Dim lX As Long Dim dtm開始time As Date Dim dtm終了time As Date Dim tmr開始 As Single Dim tmr終了 As Single Dim int繰返し回数 As Integer Set Rg = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell) Set Sh = ActiveSheet Set MyRange = Sh.Range(Sh.Cells(1, 1), Sh.Cells(Rg.Row, Rg.Column)) VariantAry = MyRange.Value lMaxRow = UBound(VariantAry, 1) lMaxCol = UBound(VariantAry, 2) int繰返し回数 = 100 MyStr = Replace(MyRange.Address, "$", "") & ") セル値数=" & _ MyRange.Count & "×繰返し" & int繰返し回数 Debug.Print "≪範囲(" & MyStr & "回≫" Debug.Print "【開始】" '(ケース01) dtm開始time = Now: tmr開始 = Timer Debug.Print "(-01-) " & dtm開始time For lX = 0 To int繰返し回数 For lRow = 1 To lMaxRow For lCol = 1 To lMaxCol Variant型値 = VariantAry(lRow, lCol) Next Next Next dtm終了time = Now: tmr終了 = Timer Debug.Print "(-01-) " & dtm終了time Debug.Print "◆Variant配列からVariant型へ複写" & " ---経過時間---> " & Format(tmr終了 - tmr開始, "0.00") '(ケース02) dtm開始time = Now: tmr開始 = Timer Debug.Print "(-02-) " & dtm開始time For lX = 0 To int繰返し回数 For lRow = 1 To lMaxRow For lCol = 1 To lMaxCol String型値 = VariantAry(lRow, lCol) Next Next Next dtm終了time = Now: tmr終了 = Timer Debug.Print "(-02-) " & dtm終了time Debug.Print "◆Variant配列からString型へ複写" & " ---経過時間---> " & Format(tmr終了 - tmr開始, "0.00") '(ケース03) dtm開始time = Now: tmr開始 = Timer Debug.Print "(-03-) " & dtm開始time For lX = 0 To int繰返し回数 For Each MyObj In MyRange Variant型値 = MyObj.Value Next Next dtm終了time = Now: tmr終了 = Timer Debug.Print "(-03-) " & dtm終了time Debug.Print "◆Rang型Value値からVariant型へ複写" & " ---経過時間---> " & Format(tmr終了 - tmr開始, "0.00") '(ケース04) dtm開始time = Now: tmr開始 = Timer Debug.Print "(-04-) " & dtm開始time For lX = 0 To int繰返し回数 For Each MyObj In MyRange String型値 = MyObj.Value Next Next dtm終了time = Now: tmr終了 = Timer Debug.Print "(-04-) " & dtm終了time Debug.Print "◆Rang型Value値からString型へ複写" & " ---経過時間---> " & Format(tmr終了 - tmr開始, "0.00") If int繰返し回数 <= 1 Then '(ケース05) dtm開始time = Now: tmr開始 = Timer Debug.Print "(-05-) " & dtm開始time For lX = 0 To int繰返し回数 For Each MyObj In MyRange Variant型値 = MyObj.Text Next Next dtm終了time = Now: tmr終了 = Timer Debug.Print "(-05-) " & dtm終了time Debug.Print "◆Rang型Text値からVariant型へ複写" & " ---経過時間---> " & Format(tmr終了 - tmr開始, "0.00") '(ケース06) dtm開始time = Now: tmr開始 = Timer Debug.Print "(-06-) " & dtm開始time For lX = 0 To int繰返し回数 For Each MyObj In MyRange String型値 = MyObj.Text Next Next dtm終了time = Now: tmr終了 = Timer Debug.Print "(-06-) " & dtm終了time Debug.Print "◆Rang型Text値からString型へ複写" & " ---経過時間---> " & Format(tmr終了 - tmr開始, "0.00") End If '(ケース07) dtm開始time = Now: tmr開始 = Timer Debug.Print "(-07-) " & dtm開始time For lX = 0 To int繰返し回数 For lRow = 1 To lMaxRow For lCol = 1 To lMaxCol '空回し Next Next Next dtm終了time = Now: tmr終了 = Timer Debug.Print "(-07-) " & dtm終了time Debug.Print "◆Variant配列の空回し" & " ---経過時間---> " & Format(tmr終了 - tmr開始, "0.00") '(ケース08) dtm開始time = Now: tmr開始 = Timer Debug.Print "(-08-) " & dtm開始time For lX = 0 To int繰返し回数 For Each MyObj In MyRange '空回し Next Next dtm終了time = Now: tmr終了 = Timer Debug.Print "(-08-) " & dtm終了time Debug.Print "◆Rang配列の空回し" & " ---経過時間---> " & Format(tmr終了 - tmr開始, "0.00") Debug.Print "【終了】" End Sub