Excel VBA テクニック集
VBA高速化テクニック2





Excel VBA テクニック集

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

「こだわりハウス」写真館| 数学公式集| ピンポイントストリートビュー| FaceBook| Excel Vba テクニック集| Excel 計算式解析・他解析| 富山の建築家| Excel 計算式解析・他解析| 積分の定義・積分の記号の意味の研究|