💻
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