最初の答え
これが私の最初の答えでした。私はあなたの質問を注意深く読んでおらず、列ごとに最小値が必要であることに気づきませんでした. まだ価値があるかもしれないので、私はこの答えを残しました。
一部のワークシート関数は配列で機能します。次のコードを試してください。
最初、Test2 の最小値は 1 で、ルーチンはその値を 2 つの異なる場所で見つけました。配列から 1 を削除し、最後に 51 を追加しました。その後、ルーチンは 2 を見つけました。
このルーチンの時間を測定したことはありませんが、VBA よりも高速でなければ驚かれることでしょう。
Option Explicit
Sub Try()
Dim InxT11 As Long
Dim InxT12 As Long
Dim InxT2 As Long
Dim Test1(1 To 10, 1 To 5) As Long
Dim Test2() As Variant
Test2 = Array(5, 20, 27, 30, 45, 50, 4, 15, 32, 33, 47, 49, 3, 11, 12, _
21, 34, 40, 2, 10, 13, 18, 19, 24, 25, 26, 36, 42, 43, 44, _
6, 7, 17, 31, 39, 41, 8, 9, 14, 16, 22, 23, 28, 29, 35, 37, _
38, 46, 48, 51)
InxT2 = LBound(Test2)
For InxT11 = LBound(Test1, 1) To UBound(Test1, 1)
For InxT12 = LBound(Test1, 2) To UBound(Test1, 2)
Test1(InxT11, InxT12) = Test2(InxT2)
InxT2 = InxT2 + 1
Next
Next
Debug.Print WorksheetFunction.Min(Test1)
End Sub
2番目の答え
この回答では、不規則またはギザギザの配列を使用しました。不規則な配列では、各行に異なる数の列を含めることができます。私の行はすべて同じ長さですが、コードを大幅に変更しなくても長さが異なる可能性があります。
Test
固定サイズのバリアント配列として定義しました。動的にすることも簡単にできます。
バリアント、またはバリアント配列の要素は、配列にすることができます。の各要素をTest
5 つの要素配列に設定しました。
ループは、各行の最小値を文字列として表示します: 5 4 3 2 13 26 6 8 22 37.
各列の最小値を求めましたが、それを達成するアプローチ (VBA ループ以外) は考えられません。このアプローチが気に入った場合は、列を最初の次元にし、行を 2 番目の次元にする必要があります。
注: 不規則配列の要素にアクセスするための構文は異なります。それは:
Debug.Print Test(InxD1)(InxD2)
お役に立てれば。
Option Explicit
Sub Try2()
Dim InxT As Long
Dim Test(1 To 10) As Variant
Test(1) = Array(5, 20, 27, 30, 45)
Test(2) = Array(50, 4, 15, 32, 33)
Test(3) = Array(47, 49, 3, 11, 12)
Test(4) = Array(21, 34, 40, 2, 10)
Test(5) = Array(13, 18, 19, 24, 25)
Test(6) = Array(26, 36, 42, 43, 44)
Test(7) = Array(6, 7, 17, 31, 39)
Test(8) = Array(41, 8, 9, 14, 16)
Test(9) = Array(22, 23, 28, 29, 35)
Test(10) = Array(37, 38, 46, 48, 51)
For InxT = LBound(Test) To UBound(Test)
Debug.Print WorksheetFunction.Min(Test(InxT)) & " ";
Next
Debug.Print
Debug.Print Test(1)(2)
End Sub