Excel VBA  配列ソートで複数データを一つの配列に格納し並べ替える

 

Excel VBA 配列ソートで、複数のデータを一つの配列に格納し、その配列を並べ替える操作です。VBAでは配列を使ってデータを操作・処理することができますが、配列自体には組み込みのソートメソッドがないため、独自のソート処理を使用する必要があります。具体的な使い方や、注意点やサンプルコードを紹介します。

 

📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!

👇実務で“そのまま使える”テンプレ付きで、コピペするだけ
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き

 

Excel VBA 配列ソートの利用

以下のようなシーンで利用されます。

1.ワークシートから配列にデータを取得し並べ替える
例えば、セルの範囲を配列に取り込み、並べ替えてから再びシートに書き戻す

2.メモリ内での高速処理
シートへの書き込み・読み込みは遅いので、配列内でデータを操作して高速化したいときに便利です。

Excel VBA 配列ソートの使い方とポイント

使い方

ExcelVBAには配列を直接ソートする組み込み関数がないため、自分でバブルソート、クイックソートなどを実装するか、WorksheetFunction.Sortを使ってシートを利用してソートする方法があります。

 

ポイント

1.大規模なデータの処理速度
配列が大きいと、処理速度に影響します。

2.並べ替えロジック
自力で処理を実装する場合は、ロジックの正確さが必要です。特に昇順・降順や、文字列と数値の扱いに注意しましょう。

 

Excel VBA 配列ソートのサンプルコード

配列のソートで数値を昇順にソートする。
Array関数で配列を作成し、配列のソートで数値を昇順に並べ替えます。Debug.Printを使って並べ替え後の配列を確認できます。

Option Explicit

Sub SortArray()
    Dim arr As Variant
    Dim i As Integer, j As Integer
    Dim temp As Variant

    ' 配列に数値を代入
    arr = Array(10, 5, 8, 1, 4)

    ' バブルソートを使って配列を昇順に並べ替える
    For i = LBound(arr) To UBound(arr) - 1
        For j = i + 1 To UBound(arr)
            If arr(i) > arr(j) Then
                temp = arr(i)
                arr(i) = arr(j)
                arr(j) = temp
            End If
        Next j
    Next i

    ' ソート後の配列を表示
    For i = LBound(arr) To UBound(arr)
        Debug.Print arr(i)
    Next i
End Sub

 

👇実務で“そのまま使える”テンプレ付きで、コピペするだけ
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き

 

ワークシートのデータを配列に取り込み、配列をソートして再書き込み

Option Explicit

Sub SortArrayFromWorksheet()
    Dim arr As Variant
    Dim i As Long, j As Long
    Dim temp As Variant
    Dim ws As Worksheet

    ' シートからデータを取得(A1:A5の範囲)
    Set ws = ThisWorkbook.Sheets("Sheet1")
    arr = ws.Range("A1:A5").Value

    ' バブルソートを使って配列を昇順に並べ替える
    For i = LBound(arr, 1) To UBound(arr, 1) - 1
        For j = i + 1 To UBound(arr, 1)
            If arr(i, 1) > arr(j, 1) Then
                temp = arr(i, 1)
                arr(i, 1) = arr(j, 1)
                arr(j, 1) = temp
            End If
        Next j
    Next i

    ' 並べ替えたデータをシートに書き戻す
    ws.Range("A1:A5").Value = arr
End Sub

ExcelVBAで配列のソートを行う場合、自分でソートアルゴリズムを実装する必要があります。配列を使用すると、ワークシートに直接操作するよりも効率的にデータを処理できるため、大量のデータや複雑な処理を行う際に役立ちます。