#501 配列を並べ替えるプロシージャ例 VBA

配列内に代入されているそれぞれの値を比較して昇順に並べ替える、汎用的なプロシージャのサンプルです。

次の「BubbleSortArray」プロシージャでは、引数varArrayで与えられた配列の中身を昇順に並べ替え、結果をその引数として返します。
引数がByRefで宣言されていますので、呼び出し元で与えた配列そのものが並べ替えられてしまうことに注意してください。


Public Sub BubbleSortArray(ByRef varArray As Variant)
'概要 : バブルソートを使って配列の要素を昇順に並べ替える
'引数 varArray : 並べ替えたい配列
'返り値 : 並べ替え後の配列をそのまま引数として返す

  Dim iLoop As Integer
  Dim jLoop As Integer
  Dim varTemp As Variant

  '配列の各要素全体のループ
  For iLoop = 0 To UBound(varArray)
    'ひとつの要素と他の要素を比較するループ
    For jLoop = iLoop + 1 To UBound(varArray)
      If varArray(iLoop) > varArray(jLoop) Then
        '他の要素の方が小さかったら配列の中身を入れ替える
        varTemp = varArray(iLoop)
        varArray(iLoop) = varArray(jLoop)
        varArray(jLoop) = varTemp
      End If
    Next jLoop
  Next iLoop

End Sub


使用例:

Sub test()

  Dim varArrayTest As Variant
  Dim iLoop As Integer

  'テストデータを配列に代入
  varArrayTest = Array(9, 1, 4, 2, 3, 5, 8, 7, 6)

  '元のデータをイミディエイトウィンドウに出力
  Debug.Print "元のデータ"
  For iLoop = 0 To UBound(varArrayTest)
    Debug.Print varArrayTest(iLoop),
  Next iLoop
  Debug.Print


  '並べ替えを実行
  BubbleSortArray varArrayTest


  '並べ替え後のデータをイミディエイトウィンドウに出力
  Debug.Print "並べ替え後のデータ"
  For iLoop = 0 To UBound(varArrayTest)
    Debug.Print varArrayTest(iLoop),
  Next iLoop

End Sub


実行結果:
実行結果


また、文字をテストデータにした場合には、次のようになります。

  varArrayTest = Array("き", "お", "え", "う", "い", "あ", "か")


実行結果:
実行結果


※なおここでは、”バブルソート”のアルゴリズムを使って配列各要素の並べ替えを行っています。これは初歩的な方法で、プログラムは簡単で済みますが、あまり大量のデータ処理には適していません。
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします


Copyright © T'sWare All rights reserved