ExcelVBA セルに書き出さずに配列の中身をソート
Excel VBAには、残念ながら、
配列の要素を並べ替えるメソッドがありません。
が、コードでそれを実現しようと思います。
まずは、元になる配列があることが前提です。
その配列名を、仮にArray1とします。
Dim Array2 As Variant
ReDim Array2(UBound(Array1))
上記のように、もう1つ、配列を宣言し、
要素数は、Array1と同数に定義します。
Dim i As Long, j As Long
Dim n As Long
Dim data As Variant
ループカウンタ用変数として、iとjを宣言、
インデックス番号用として、変数nを宣言します。
変数dataは、配列の中身を一時的に格納するために使います。
For i = 0 To UBound(Array1)
n = UBound(Array1)
data = Array1(i)
For j = UBound(Array1) To 0 Step -1
If data < Array1(j) Then
n = n - 1
End If
Next j
Array2(n) = data
Next i
変数iで、Array1をループ。
nに、Array1の最大インデックス番号を代入。
dataに、Array1の要素を先頭から順番に代入。
変数jで、Array1を、iのループ内で、後ろからループ。
dataの中身を、Array1の要素と比較
(後ろから前に向かって1つずつ比較)
dataのほうが小さければ、nから1を引く。
これを繰り返して、nが確定したら、
Array2の、インデックス番号nに、dataを代入。
⇒ Array2の中身は、Array1を昇順で並べ替えたものになっている。
要素数がそれほど多くなければ、使える方法だと思います。
ぜひ、お試しください^^
この記事が気に入ったらサポートをしてみませんか?