hakeの日記

Windows環境でプログラミングの勉強をしています。

EXCEL VBAメモ - Rangeで指定した範囲のセルの値を配列変数に

範囲が広い場合にはセルを一つずつ操作するよりも、一旦配列にコピーして操作したほうが速い(らしい)。

Sub sample()
    Dim r As Range, ra As Range
    Dim a As Variant
    Dim i As Long, col As Long, row As Long

    Set ra = Range("A1:D3")
    ' 初期値書き込み
    i = 1
        For Each r In ra
        r.Value = i
        i = i + 1
    Next

    ' セル範囲の値を配列変数へコピー
    a = ra
    ' 元の値を二乗する
    For row = 1 To UBound(a)
        For col = 1 To UBound(a, 2)
            a(row, col) = a(row, col) ^ 2
        Next
    Next
    ' 配列をセルに書き戻し
    ra = a
End Sub