VBAで
・指定した1列のデータ
・指定した1行のデータ
を一括で取得して配列へ格納できます!
指定した1列のデータを一括で取得
ここでは例として、シート「sample」上の
・セル「B3」~「B7」の範囲のデータ(1列のデータ)を一括で取得して
・配列へ格納し
・イミディエイトウィンドウへ出力
します。
※ここでの配列は「1次元の、普通の配列」です。「2次元配列」ではないです。
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
上記を実行すると
・ 指定した1列のデータを一括で取得し
・イミディエイトウィンドウへ出力
できたことを確認できます。
指定した1行のデータを一括で取得
ここでは例として、シート「sample」上の
・セル「C2」~「G2」の範囲のデータ(1行のデータ)を一括で取得して
・配列へ格納し
・イミディエイトウィンドウへ出力
します。
※ここでの配列は「1次元の、普通の配列」です。「2次元配列」ではないです。
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
上記を実行すると
・ 指定した1行のデータを一括で取得し
・イミディエイトウィンドウへ出力
できたことを確認できます。
参考①
上記のVBAコードは以下の記事を参考にして作成しました。
●最終行の取得
●最終列の取得
●「列を示すアルファベット」を取得
参考②
指定した範囲(複数行、複数列)のデータを一括で取得して、2次元配列へ格納することもできます。
詳細は以下の記事をご確認ください。
参考③
1列のデータを一括で取しつつ
・重複を除いたリスト(配列)
・ソート(並び替え)されたリスト(配列)
・フィルターされたリスト(配列)
を作成することもできます。
詳細は以下の記事をご確認ください。
●重複を除いたリスト(配列)
●ソート(並び替え)されたリスト(配列)
●フィルターされたリスト(配列)
参考④
作成済みの配列に対して
・重複を削除
・ソート(並び替え)
することもできます。
詳細は以下の記事をご確認ください。
●配列から重複を削除する
●配列をソート(並び替え)する
参考⑤
上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。
●「WorksheetFunction」オブジェクトの「Transpose」メソッド
●For Eachステートメント
●イミディエイトウィンドウへ出力