Zenn
💻

ExcelVBAでセル範囲を配列に格納する

に公開

セル範囲を配列に格納すると、VBAは高速になり、読みやすくなる

セル範囲(以降、データ範囲)を配列に格納することで、処理速度は大幅にアップし、プログラムの可読性があがる。
ある程度のデータ量を処理する場合には、mustで使用する処理である。

データ範囲を配列に格納するプログラムの解説

Variant型の変数を宣言する

Sub S_StoreRange()
    
    Dim zennItems As Variant

End Sub

まず、データ範囲をごっそり格納するための変数をVariant型で宣言する。
変数名は「(なんちゃら)Items」とかがいいと思う。

データ範囲は日々変化する

データは生き物。実際、顧客管理情報や製品在庫数等、Excelのデータは毎日減ったり増えたり、データ量が定まることはないと思う。
つまり、データ範囲は日々変化する。
配列に格納するセル"A1"~"F300"のように固定してしまうと、301行目以降のデータは配列に格納されなくなってしまう。

データ範囲を特定する

データ範囲が柔軟に伸び縮みするように、データの最終行と最終列を毎回取得するプログラムを書く。
End(xl~)を利用して、最終行、最終列を取得、変数に格納する。


    Dim lastRow as long'最終行番号を格納する
    Dim lastColumn as long'最終列番号を格納する

    With ActiveWorkbook.Worksheets("zennNote")
        
        '1列目の最終行を取得し、Long型の変数lastRowに格納する
        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        
        '1行目の最終行を取得し、Long型の変数lastColumnに格納する
        lastColumn = .Cells(1, Columns.Count).End(xlToLeft).Column

    End With

先のプログラムに追記するとこんな感じ。
データ範囲をごっそり格納するためのVariant型の変数を宣言。
最終行と最終列を格納するためのLong型の変数を宣言。
最終行と最終列を特定・取得する。

Sub S_StoreRange()
    
    'データ範囲を格納する変数
    Dim noteItems As Variant    
    'データ範囲の最終行、最終列を格納するための変数
    Dim lastRow, lastColumn As Long
    
    With ActiveWorkbook.Worksheets("zennNote")
        
        '1列目の最終行を取得し、Long型の変数lastRowに格納する
        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        
        '1行目の最終行を取得し、Long型の変数lastColumnに格納する
        lastColumn = .Cells(1, Columns.Count).End(xlToLeft).Column

    End With

End Sub

データ範囲を変数にごっそり格納する

箱は用意した。
データ範囲の最終行、最終列も取得した。
あとは変数にごっそり格納するだけだ。

'データ範囲を変数に格納する
zennItems = Range(.Cells(1, 1), .Cells(lastRow, lastColumn))

変数 = Rnge(Cells(1,1),Cells(lastRow,LastColumn))
これでOK
データ範囲を配列に格納するプログラムが完成した。

データ範囲を配列に格納するプログラムの全文

Sub S_StoreRange()
    
    'データ範囲を格納する変数
    Dim zennItems As Variant
    'データ範囲の最終行、最終列を格納するための変数
    Dim lastRow, lastColumn As Long

    With ActiveWorkbook.Worksheets("zennNote")
        
        '1列目の最終行を取得し、Long型の変数lastRowに格納する
        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        '1行目の最終行を取得し、Long型の変数lastColumnに格納する
        lastColumn = .Cells(1, Columns.Count).End(xlToLeft).Column

        'データ範囲を変数に格納する
        zennItems = Range(.Cells(1, 1), .Cells(lastRow, lastColumn))
    
    End With

End Sub

Discussion

ログインするとコメントできます