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を昇順で並べ替えたものになっている。

要素数がそれほど多くなければ、使える方法だと思います。
ぜひ、お試しください^^

この記事が気に入ったらサポートをしてみませんか?