shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】処理を高速化するため2次元配列の活用サンプル

Excel VBAで数万行の大量データを処理を行う場合、セルのデータを一つずつ操作するよりも、一度に全てのデータを2次元配列に一括で読み込んでから処理を行った方が処理速度も向上し、データの取り扱いも便利になることが多いです。

VBAサンプル

以下に、2次元配列を使用してワークシートのデータを読み込み、処理し、書き出すマクロのコードを示します。

Sub セルのデータを二次元配列で処理()

    Dim 最終行 As Long
    Dim 最終列 As Long
    Dim 配列データ As Variant
    Dim 行 As Long
    Dim 列 As Long

   'セルの内容を配列に入れる'
    最終行 = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    最終列 = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
    配列データ = Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(最終行, 最終列)).Value
                
   '配列をループで処理'
    For 行 = 2 To UBound(配列データ, 1)
        For 列 = 1 To UBound(配列データ, 2)
            'ここで配列の各要素を処理'
            '例:配列データ(行, 列) = 配列データ(行, 列) * 2'
        Next 列
    Next 行
   
   '配列の内容をセルに戻す'
    ActiveSheet.Cells(1, 1).Resize(UBound(配列データ, 1), UBound(配列データ, 2)).Value = 配列データ
    
    Erase 配列データ

End Sub

補足説明

  • ActiveSheetの最終行、最終列を取得して配列に格納しています。
  • 配列をシートに戻す場所は、取得範囲と同じですが、「他の場所への移動時のサンプル」となるようにResizeプロパティを利用しています。

以上、Excel VBAで、処理を高速化するため2次元配列の活用サンプルでした。