VBA高速化テクニックです。Range更新のテクニックにより高速化します。
テクニック1
セル1個ずつ更新すると時間がかかるので、一括更新します。
(例1)
Dim I As Integer
Dim J As Integer
For I = 1 To 10
For J = 1 To 3
Cells(I, J).Font.Name = "MS 明朝"
Next J
Next I
(例1の高速化)
Range("A1:C10").Font.Name = "MS 明朝"
テクニック2
領域に値設定する場合、1個ずつ設定するよりも、変数テーブルにいったん値を入れて後で一括で領域に設定すれば、高速になります。
(例2)
Dim I As Integer
Dim J As Integer
For I = 1 To 10
For J = 1 To 3
Cells(I, J).Value = I + J
Next J
Next I
(例2の高速化)
Dim Value_Frm(9, 2) As Variant
Dim I As Integer
Dim J As Integer
For I = 1 To 10
For J = 1 To 3
Value_Frm(I - 1, J - 1) = I + J
Next J
Next I
Range("A1:C10").Value = Value_Frm()
テクニック3
書式設定領域が1か所でないとき、ユニオンオブジェクトを使います。
領域の更新を1回で済ませます。
(例3)
Dim I As Integer
For I = 1 To 100
Columns(I * 2).Height = 12
Next I
(例3の高速化)
Dim Union_Obj As Object
Dim I As Integer
Set Union_Obj = Columns(2)
For I = 2 To 100
Set Union_Obj = Application.Union(Union_Obj, Columns(I * 2))
Next I
Union_Obj.Height = 12
テクニック4
処理の中で、同じ領域の書式を何度も変える場合、変数を使います。
下記の例は、複数回の処理において、行の高さという書式設定を毎回行います。
(例4)
・第1回目
Columns(1:100).Height = 12
・
・第2回目
Columns(1:100).Height = 12
・
・第3回目
Columns(1:100).Height = 14
・
・
・第n回目
Columns(1:100).Height = 12
(例4の高速化)
現状の書式を変更する場合にのみ、書式を変更します。
Dim Height_New As Double
Dim Height_Old As Double
・第1回目
Columns(1:100).Height = 12
Height_Old = 12
・
・
・第n回目
Height_New = 12
if Height_Old <> Height_New Then
Columns(1:100).Height = Height_New
Height_Old = Height_New
End If
|