💻
ExcelVBAで特定のデータ範囲を配列に格納する
Cellsは遅いし読みにくい
For i = 2 to lastRow
Cells(i,1).value
Next
特定のデータ範囲内のデータを調べたいときに、全部Cellsで確認していくと時間がかかります。それにプログラムも読みにくくなってしまいます。
データ範囲まるごと配列に入れてしまいたい
Variant型にRangeでまるごと格納
Dim ZennList as Variant
Dim ZennRange as Range
Set ZennRange = Range(Cells(1,1),Cells(100,3))
ZennList = ZennRange
これで配列から自由にとりだせます
For i = 2 to Ubound(ZennList)
ZennList(i,1)
Next
連続するデータ範囲を特定してRangeで返すFunctionプロシージャ
'特定のデータ範囲をRangeで返す
'データ範囲はEndで特定
'返り値はRange
'受け取る変数はVariantであること
Private Function F_GetRange(ByVal arg_getSheet As Worksheet, ByVal arg_startRow As Long, arg_startColumn As Long) As Range
Dim lastRow, lastColumn As Long
arg_getSheet.Activate
lastRow = Cells(Rows.Count, arg_startColumn).End(xlUp).Row
lastColumn = Cells(arg_startRow, Columns.Count).End(xlToLeft).Column
Set F_GetRange = Range(Cells(1, 1), Cells(lastRow, lastColumn))
End Function
連続するデータ範囲を特定してRangeで返すFunctionプロシージャを呼び出して使用する
Sub S_Main()
'特定のデータ範囲を配列に格納する場合
'Variant型で変数を用意しておく
Dim ListA As Variant
Dim getSheetName As String
Dim getSheet As Worksheet
Dim startRow, startColumn As Long
getSheetName = "Zenn"
Set getSheet = ActiveWorkbook.Worksheets(getSheetName)
startRow = 1
startColumn = 1
'Variant型の変数にRangeで代入する
ListA = F_GetRange(getSheet, startRow, startColumn)
End Sub
'特定のデータ範囲をRangeで返す
'データ範囲はEndで特定
'返り値はRange
'受け取る変数はVariantであること
Private Function F_GetRange(ByVal arg_getSheet As Worksheet, ByVal arg_startRow As Long, arg_startColumn As Long) As Range
Dim lastRow, lastColumn As Long
arg_getSheet.Activate
lastRow = Cells(Rows.Count, arg_startColumn).End(xlUp).Row
lastColumn = Cells(arg_startRow, Columns.Count).End(xlToLeft).Column
Set F_GetRange = Range(Cells(1, 1), Cells(lastRow, lastColumn))
End Function
Discussion