VBAの配列をクイックソートで並べ替え

VBAで配列を使う際に並び順を昇順や降順に変えたいことがあります。

以下のコードは配列の内容を昇順(小さい順)に並べなおします。

クイックソート

以下の配列ソート処理はクイックソートの仕組みで実装しています。

クイックソートはバブルソートと異なり複雑な仕組みになっています。

ただ、一般的にはいろんなソート処理の中でも一番高速だと言われています。

クイックソートの仕組み

以下のクイックソート関数の仕組みを簡単に説明します。

  1. 配列の中の中央の要素値を取得する。(中央要素値とします)
  2. 配列を先頭から見ていき、中央要素値以上の値を探す。
  3. 配列を最後から見ていき、中央要素値以下の値を探す。
  4. それぞれ見つかった位置が先頭から探した方が、最後から探した方より右にある場合は中央要素値以上、以下の値の探索を終了する。
  5. 上記の条件に合致しない場合は、見つかった大小の値を入れ替える。
  6. 先頭を1つ右に、最後を1つ左にずらして、再度2.に戻る。
  7. 中央値の左側を再帰でクイックソートする。
  8. 中央値の右側を再帰でクイックソートする。



コード

以下がクイックソートのコードです。

引数は配列、ソート開始位置、ソート終了位置の3つがあります。

2番目と3番目の引数は配列の一部だけをソートしたい場合に設定します。

通常は省略して構いません。

昇順ではなく降順にしたい場合は、大小比較や入れ替え部分を反対にすれば可能になります。

または別ページ「VBAの配列を逆順に並べ替え」のようなコードで昇順と降順を入れ替えるのもありです。

利用方法

利用方法はこのような感じになります。

ソート後は、以下の順になります。

是非活用してください。

関連記事

サブコンテンツ

このページの先頭へ