💻

ExcelVBAで特定のデータ範囲を配列に格納する

2022/04/23に公開

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

https://zenn.dev/webdebris/articles/bab53de75c4b2d

Discussion