【VBA】指定した1列/1行のデータを一括で取得して、配列へ格納する

VBAで
 ・指定した1のデータ
 ・指定した1のデータ
一括で取得して配列へ格納できます!

PR

指定した1列のデータを一括で取得

ここでは例として、シート「sample」上の
 ・セル「B3」~「B7」の範囲のデータ(1のデータ)を一括で取得して
 ・配列へ格納
 ・イミディエイトウィンドウへ出力
します。
※ここでの配列は「1次元の、普通の配列です。「2次元配列」ではないです。

1列のデータ
1のデータ
Option Explicit

Sub sample()
    
    Dim startRange As Range
    Dim endRow As Double
    Dim endRange As Range
    Dim address As String
    Dim arrAddress As Variant
    Dim targetColumnAlphabet As String
    Dim wf As WorksheetFunction
    Dim arrData As Variant
    Dim data As Variant
    
    '開始セルを指定
    Set startRange = Worksheets("sample").Range("B3")
    '最終行を取得
    endRow = startRange.End(xlDown).Row
    '最終セルを取得
    Set endRange = Worksheets("sample").Cells(endRow, startRange.Row)
    
    '開始セルの「列を示すアルファベット」を取得
    '┗「対象セルのアドレス」を「$」で区切って「2つの要素を持つ配列」を作成
    '┗「作成された配列の1要素目」に「列(アルファベット)」が格納される
    address = startRange.address(RowAbsolute:=True, ColumnAbsolute:=False)
    arrAddress = Split(address, "$")
    targetColumnAlphabet = arrAddress(0)

    Set wf = Application.WorksheetFunction
    
    '指定した範囲を一括で取得
    arrData = wf.Transpose(Range(targetColumnAlphabet & startRange.Row & ":" & targetColumnAlphabet & endRange.Row))
    
    '配列の数だけ繰り返し
    For Each data In arrData
        '配列を表示
        Debug.Print data
    Next

End Sub

「開始セル」を指定します(16行目)。
※状況に応じて任意の値を指定してください。上記ではセル「B3」を指定しています。

「一括で取得した範囲のデータを格納するVariant型の変数」を定義します(12行目)。
※上記では変数「arrData」を定義しています。この変数が配列になります。

取得するの「最終セル」を取得します(16~20行目)。

「対象となる列の」の「アルファベット」を取得します(25~27行目)。

「WorksheetFunction」オブジェクトの「Transpose」メソッドにより、指定した範囲(=1)を一括で取得して「Variant型の変数」へ格納します(32行目)。
※この変数が配列になります。

配列(=取得したデータ)をイミディエイトウィンドウへ出力します(35~37行目)。


上記を実行すると
 ・ 指定した1のデータを一括で取得し
 ・イミディエイトウィンドウへ出力
できたことを確認できます。

実行結果
実行結果
PR

指定した1行のデータを一括で取得

ここでは例として、シート「sample」上の
 ・セル「C2」~「G2」の範囲のデータ(1のデータ)を一括で取得して
 ・配列へ格納
 ・イミディエイトウィンドウへ出力
します。
※ここでの配列は「1次元の、普通の配列です。「2次元配列」ではないです。

1行のデータ
1のデータ
Option Explicit

Sub sample()
    
    Dim startRange As Range
    Dim targetRow As Long
    Dim address As String
    Dim arrAddress As Variant
    Dim startColumnAlphabet As String
    Dim endColumn As Long
    Dim endRange As Range
    Dim endColumnAlphabet As String
    Dim wf As WorksheetFunction
    Dim arrData As Variant
    Dim data As Variant
    
    '開始セルを取得
    Set startRange = Worksheets("sample").Range("C2")
    
    '対象となる行を取得
    targetRow = startRange.Row
    
    '開始セルの「列を示すアルファベット」を取得
    address = startRange.address(RowAbsolute:=True, ColumnAbsolute:=False)
    arrAddress = Split(address, "$")
    startColumnAlphabet = arrAddress(0)
    
    '最終列を取得
    endColumn = startRange.End(xlToRight).Column
    '最終セルを取得
    Set endRange = Worksheets("sample").Cells(targetRow, endColumn)
    
    '最終セルの「列を示すアルファベット」を取得
    address = endRange.address(RowAbsolute:=True, ColumnAbsolute:=False)
    arrAddress = Split(address, "$")
    endColumnAlphabet = arrAddress(0)
    
    Set wf = Application.WorksheetFunction
    
    '指定した範囲を一括で取得 ※「Transpose」メソッドを2回実行
    arrData = wf.Transpose(wf.Transpose(Range(startColumnAlphabet & targetRow & ":" & endColumnAlphabet & targetRow)))
    
    '配列の数だけ繰り返し
    For Each data In arrData
        '配列を表示
        Debug.Print data
    Next
    
End Sub

「WorksheetFunction」オブジェクトの「Transpose」メソッドを2回実行することで、指定した範囲(=1)を一括で取得して「Variant型の変数」へ格納します(41行目)。
2回実行することがポイントです。
※1を取得する場合は1回でよいですが、1を取得する場合は2回実行します。
※この変数が配列になります。


上記を実行すると
 ・ 指定した1のデータを一括で取得し
 ・イミディエイトウィンドウへ出力
できたことを確認できます。

実行結果
実行結果
PR

参考①

上記のVBAコードは以下の記事を参考にして作成しました。

●最終の取得


●最終の取得


●「列を示すアルファベット」を取得

PR

参考②

指定した範囲(複数行、複数列)のデータを一括で取得して、2次元配列へ格納することもできます。

詳細は以下の記事をご確認ください。

PR

参考③

1列のデータを一括で取しつつ
 ・重複を除いたリスト(配列)
 ・ソート(並び替え)されたリスト(配列)
 ・フィルターされたリスト(配列)
を作成することもできます。

詳細は以下の記事をご確認ください。

●重複を除いたリスト(配列)


●ソート(並び替え)されたリスト(配列)


●フィルターされたリスト(配列)

PR

参考④

作成済みの配列に対して
 ・重複を削除
 ・ソート(並び替え)
することもできます。

詳細は以下の記事をご確認ください。

●配列から重複を削除する


●配列をソート(並び替え)する

PR

参考⑤

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●「WorksheetFunction」オブジェクトの「Transpose」メソッド


●For Eachステートメント



イミディエイトウィンドウへ出力