配列数式で扱う2次元配列の処理は、For Eachで処理することが多いが初めから配列に入れて処理する方法もある。
'配列にRangeのデータを入れる
Function aa(r As Range)
Dim ar()
ar = r 'セルの値が入る
Dim i As Integer, j As Integer
For i = 1 To UBound(ar, 1) '2次元配列の1番目、行。1から始めるのはrがRangeだから
For j = 1 To UBound(ar, 2) '2次元配列の2番目、列
ar(i, j) = i & "," & j & "," & ar(i, j)
Next
Next
aa = ar
End Function
For i=1から始まることに注意。配列の要素番号は0から始まるのが普通だが、動的配列ar()にRangeを入れると要素番号/インデックス番号は1から始まる。
データベースのような表からデータの取り出しは行単位になる。ある条件で取り出して別の配列arrに入れる。行単位に処理するのでFor文の列の処理の前にIf条件文を入れることになる。
'配列にRangeのデータを入れる
Function myTenplate(r As Range)
Dim ar() 'Rangeの範囲のデータを入れる動的配列
ar = r 'セルの値が入る
Dim i As Integer, j As Integer
j = 1 'For文の中で使い始めで0だと飛ぶため。
Dim arr(1 To 100, 1 To 10) '関数値用。スタートを1にして列のjをそのまま使う。1000くらいにやると重く、飛ぶことも。
Dim ii As Integer 'arrの行番号用、列はjを使う
For i = 1 To UBound(ar, 1) '2次元配列の1番目、行。1から始めるのはrがRangeだから
If i = 1 Or i = 3 Then '条件、1と3の行だけ
ii = ii + 1 'スタートが1なので先に1にしておく
For j = 1 To UBound(ar, 2) '2次元配列の2番目、列
arr(ii, j) = i & "," & j & "," & ar(i, j)
Next
End If
Next
myTenplate = arr
End Function
2次元配列の処理は頭の中で処理できるほど簡単では無い。難しくしているのがi,jなどの変数とそれが位置を意味しており、ar(i,j)で一つのデータ。2次元配列の音からデータが2つあると勘違いしてはいけない。私だけかもしれないが。
時間はかかってもワークシート関数を駆使して「やっぱできない」ってことはプログラムの世界ではありませんし、使った時間はスキルアップになります。