Excel小僧:ワークシートからデータを読み込む [コンピューター]
ワークシートの横1列に並んだn個のセルに格納されたデータを配列変数に格納するVBAのサブプロシージャを作ってみました。
【図1】ワークシート(例)
・一番左のセル(T1)には、データの個数が格納されている。個数を数えるため「=COUNTA(U1:AB1)」の数式が設定されている。
・2個目(U1)からn個目(AB1)のセルに読み込むデータが入力されている。
・一番左のセル(T1)からn個目(AB1)のセルのセル範囲(Range)に名前(例:_namae)が設定されている。
読み込むデータのセル範囲の名前(例:_namae)と、データを格納するVariant型変数を与えたら、Variant型変数にデータの1次元配列を格納して戻すサブプロシージャを作ります。
Public Sub mySRd1RAr2(ByVal RangeName1 As String, _
ByRef myArray1 As Variant)
'【機能】Range名で指定されるワークシートの横1行のセルを一次元配列に読み込む
'【引数】
' RangeName1 : Range名
' myArray1 : ワークシートの内容を1次元配列にしたもの(戻り値)
'【変数】
Dim tmpData1 As Variant ' ワークシートから読み込んだデータ
'【実行コード】
tmpData1 = Range(RangeName1) ' ワークシートからデータを読み込む
Call mySRd1RAr(tmpData1, tmpData1(1, 1), 1, myArray1) ' ワークシートから読み込んだデータを1次元配列に格納
End Sub
Public Sub mySRd1RAr(ByVal tmpWSValue As Variant, _
ByVal ColumnsCnt1 As Long, _
ByVal RowNum1 As Long, _
ByRef myArray1 As Variant)
'【機能】ワークシートの横1行のセルを一次元配列に読み込む
'【引数】
' tmpWSValue : ワークシートの内容(2次元配列)、1列目:データ個数、2列目以降:データ
' ColumnsCnt1 : 読み込む行のデータ個数(列数)
' RowNum1 : 読み込む行の行番号
' myArray1 : ワークシートの内容を1次元配列にしたもの(戻り値)
'【変数】
Dim i As Long ' 整数
'【実行コード】
ReDim myArray1(ColumnsCnt1 - 1) ' 配列をデータ個数に合わせて初期化
For i = 1 To ColumnsCnt1
myArray1(i - 1) = tmpWSValue(RowNum1, (i + 1)) ' 配列にデータを読み込む
' Debug.Print "myArray1(" & (i - 1) & ")=" & myArray1(i - 1)
Next i
End Sub
【図1】ワークシート(例)
・一番左のセル(T1)には、データの個数が格納されている。個数を数えるため「=COUNTA(U1:AB1)」の数式が設定されている。
・2個目(U1)からn個目(AB1)のセルに読み込むデータが入力されている。
・一番左のセル(T1)からn個目(AB1)のセルのセル範囲(Range)に名前(例:_namae)が設定されている。
読み込むデータのセル範囲の名前(例:_namae)と、データを格納するVariant型変数を与えたら、Variant型変数にデータの1次元配列を格納して戻すサブプロシージャを作ります。
Public Sub mySRd1RAr2(ByVal RangeName1 As String, _
ByRef myArray1 As Variant)
'【機能】Range名で指定されるワークシートの横1行のセルを一次元配列に読み込む
'【引数】
' RangeName1 : Range名
' myArray1 : ワークシートの内容を1次元配列にしたもの(戻り値)
'【変数】
Dim tmpData1 As Variant ' ワークシートから読み込んだデータ
'【実行コード】
tmpData1 = Range(RangeName1) ' ワークシートからデータを読み込む
Call mySRd1RAr(tmpData1, tmpData1(1, 1), 1, myArray1) ' ワークシートから読み込んだデータを1次元配列に格納
End Sub
Public Sub mySRd1RAr(ByVal tmpWSValue As Variant, _
ByVal ColumnsCnt1 As Long, _
ByVal RowNum1 As Long, _
ByRef myArray1 As Variant)
'【機能】ワークシートの横1行のセルを一次元配列に読み込む
'【引数】
' tmpWSValue : ワークシートの内容(2次元配列)、1列目:データ個数、2列目以降:データ
' ColumnsCnt1 : 読み込む行のデータ個数(列数)
' RowNum1 : 読み込む行の行番号
' myArray1 : ワークシートの内容を1次元配列にしたもの(戻り値)
'【変数】
Dim i As Long ' 整数
'【実行コード】
ReDim myArray1(ColumnsCnt1 - 1) ' 配列をデータ個数に合わせて初期化
For i = 1 To ColumnsCnt1
myArray1(i - 1) = tmpWSValue(RowNum1, (i + 1)) ' 配列にデータを読み込む
' Debug.Print "myArray1(" & (i - 1) & ")=" & myArray1(i - 1)
Next i
End Sub
やばいぜ、ありがとうございます。
by cheese999 (2023-11-27 18:35)