|
下記コードにてUnionメソッドのトロさを体験してください。
1行目から2500行目までの間を、1行おきに10列選択します。
一応普通版?とOffsetを使った物を作って見ましたが、選択する個数が増えると、遅さにとても耐えられません。
Unionは、一気に書き込めたりするので便利だとは思いますが、適度な個数でないと、1個1個書き込むより遅いかもしれません。
書き方が悪い性も多少はあるでしょうが...。
Sub ユニトロ()
Dim 始点 As String, CtR As Long, CtC As Long
Dim 行数範囲 As Long, 選択行数 As Long, 空き行 As Long
Dim 選択列数 As Long, UNi選択 As Range, Cnt As Long
始点 = "A1"
CtR = Range(始点).Row
CtC = Range(始点).Column
行数範囲 = 2500
選択行数 = 1
空き行 = 1
選択列数 = 10
Set UNi選択 = Cells(CtR, CtC).Resize(選択行数, 選択列数)
Cnt = 行数範囲 \ (選択行数 + 空き行) - 1
MsgBox "選択する行数は、" & Cnt & "行になります。"
STime = Now()
For i = 1 To Cnt
CtR = CtR + 選択行数 + 空き行
Set UNi選択 = Application.Union(UNi選択, Cells(CtR, CtC).Resize(選択行数, 選択列数))
現在行 = 現在行下 + 空行数 + 1
Next
CTime = Now() - STime
UNi選択.Select
MsgBox Format(CTime, "h:mm:ss") & vbCrLf & _
Format(Now() - STime, "h:mm:ss")
Set UNi選択 = Nothing
End Sub
Sub ユニトロOffset()
Dim 始点 As String, CT As Long, i As Long
Dim 行数範囲 As Long, 選択行数 As Long, 空き行 As Long
Dim 選択列数 As Long, UNi選択 As Range, Cnt As Long
始点 = "A1"
行数範囲 = 2500
選択行数 = 1
空き行 = 1
選択列数 = 10
Set UNi選択 = Range(始点).Resize(選択行数, 選択列数)
Cnt = 行数範囲 \ (選択行数 + 空き行) - 1
MsgBox "選択する行数は、" & Cnt & "行になります。"
CT = Cnt * (選択行数 + 空き行)
STime = Now()
For i = 選択行数 + 空き行 To CT Step 選択行数 + 空き行
Set UNi選択 = Application.Union(UNi選択, Range("A1").Resize(選択行数, 選択列数).Offset(i))
Next
CTime = Now() - STime
UNi選択.Select
MsgBox Format(CTime, "h:mm:ss") & vbCrLf & _
Format(Now() - STime, "h:mm:ss")
Set UNi選択 = Nothing
End Sub
'1行目から2500行までの基本的?な書き込み。(速度比較用)
Sub 書き込みテスト()
Dim RR As Long
STime = Now
For i = 1 To 2500
Cells(i, 1).Resize(, 10).Value = i
Next
MsgBox Format(Now() - STime, "h:mm:ss")
End Sub
|
|