配列内のデータを並べ替える


配列に格納されている数値を並べ替えるには、どうしたらいいでしょう。もちろん、ネットを検索すれば、バブルソートだとかクィックソートだとか、その手のアルゴリズムがたくさん見つかります。でも、Excel VBAでやるのなら、簡単な方法があります。

まず思いつくのは、配列のデータを一度ワークシートに展開して、その表を並べ替えるやり方です。文章で書くと、すごく手間がかかって、さぞ時間がかかるような気もしますが、実際にはめっちゃ高速です。具体的なコードは、かなり昔に書いた下記のページをご覧ください。

配列をソートする

今回は、もっと簡単な方法です。ただし、条件が1つ。配列内のデータは数値であること。文字列を並べ替えることはできません。これは次のようにします。あまりに簡単な考え方なので、解説は省略します。いえ、決して手抜きではありません。

Sub Sample1()
    Dim A(100) As Long, B(100) As Long, i As Long
    For i = 1 To 100
        A(i) = Int(Rnd * 10000) ''乱数をセット
    Next i
    For i = 1 To 100
        B(i) = WorksheetFunction.Small(A, i)    ''並べ替える(昇順)
    Next i
    For i = 1 To 100
        Cells(i, 1) = B(i)  ''確認
    Next i
End Sub

もちろん、降順で並べ替えるには、LARGE関数を使います。