VBA 配列を昇順または降順に並べ替えます

配列を昇順または降順に並べ替えます

 今回は 受け取った配列を昇順または降順に並べ替えるユーザー定義関数 のレシピ(←サンプルコードのこと)を紹介します。昇順は数字を小さい順に並べること、降順は大きい順に並べることです。この2つの機能をひとつの関数でまとめて実装するので、とってもお得なレシピになってますよ~。

 Option Base 1

 '配列を昇順または降順に並べます

 'オプション引数が省略された場合は 0 が指定されたとみなされます
 Function SortArray(x() As Variant, Optional s As Long = 0) As Variant

  Dim k As Long
  Dim ub As Long
  Dim y() As Variant

  '配列 x() のインデックス上限値を取得します
  ub = UBound(x)

  '配列 y() のインデックス上限値を設定します
  ReDim y(ub)

  For k = 1 To ub

   'オプション引数 s = 0 は昇順です
   If s = 0 Then
    y(k) = WorksheetFunction.Small(x(), k)

   'オプション引数 s に 0 以外の値が入ると降順です
   Else
    y(k) = WorksheetFunction.Large(x(), k)

   End If

  Next k

  SortArray = y()

 End Function

 この関数は第 1 引数に渡す配列は必須ですが、2 つめの引数は「昇順」または「降順」を選択するためのオプション引数となっています。もしこの引数を省略すると自動的に 0 が入り、配列を昇順に並べ替えます。

 並び替えには Excel関数の Small関数と Large関数を利用しています。
 Small関数をワークシートで使う場合は

Small(セル範囲, 順位)

と記述します。第 2 引数で指定された値を x とすると、指定されたセル範囲にあるデータの中から「 x 番目小さい数」を取り出します。Large関数の場合は「 x 番目に大きい数」です。

 上のコードでは、オプション引数が 0 に指定された場合は、Small関数を使って 1 番小さな数を y(1) に入れて、その次に 2 番目に小さな数を y(2) に入れて ...... ということを繰り返して昇順並べを実現しています。

 それでは、SortArray関数を実際に呼びだして使ってみましょう。

 'SortArray関数のテストプログラム

 Sub TestSort()

  Dim z As Variant
  Dim a(5) As Variant
  Dim j As Long

  a(1) = 52
  a(2) = 73
  a(3) = 41
  a(4) = 19
  a(5) = 38

  z = SortArray(a(), 1)

  For j = 1 To 5
   Debug.Print z(j);
  Next j

 End Sub

 このマクロの中では、オプション引数を「 1 」に指定しているので、配列は降順(大きい順)に並び替えられて

 73 52 41 38 19

と表示されます。

Google広告
スポンサーリンク
スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください