エクセル

色々な列を同時にソート

エクセル

[PR]当サイトはアフィリエイト広告を利用しています。

はじめに

今回は前回やったバブルソートを少し改良します。

前回やったのは単純な数列をソートするということでした。

この表の料金だけをソートしました。

今回はプランも一緒にソートしようということをやります。

基本はバブルソートですが、そこを少し変更します。

こういう基本にプラスした、ちょっとやりたいことを考えることが、オーダーメイドのアルゴリズムを作る練習になります。

それでは始めます。

コード

次のように入力します。

Sub sort2()
    Dim x(6) As Long
    Dim t(6) As String
    Dim temp As Long
    Dim tempT As String
    Dim flag As Boolean
    flag = False
    Dim i As Integer
    For i = 1 To 6
        x(i) = Cells(3 + i, 5).Value
        t(i) = Cells(3 + i, 4).Value
    Next i
    Do While (flag = False)
        flag = True
        For i = 1 To 5
            If (x(i) > x(i + 1)) Then
                flag = False
                temp = x(i)
                tempT = t(i)
                x(i) = x(i + 1)
                t(i) = t(i + 1)
                x(i + 1) = temp
                t(i + 1) = tempT
            End If
        Next i
    Loop
    For i = 1 To 6
        Cells(i + 10, 8).Value = x(i)
        Cells(i + 10, 7).Value = t(i)
    Next i
End Sub

全体的な流れは前回のバブルソートと同じです。

今回の変更点は、

    Dim x(6) As Long
    Dim t(6) As String
    Dim temp As Long
    Dim tempT As String

要するに数値用の配列とは別に、プラン名用の配列tと、tの交換用にtempTを用います。

そして数値の交換が行われたら、プラン名も同じように交換して、数値の交換を追随します。

交換結果は

ちゃんと料金とプランの対応が合っていますね。

まとめ

今回はバブルソートにひと手間加えて、表の対応関係を維持したままソートを行ってみました。

こういうちょっとした改良を練習していくと、少しずつアルゴリズム作成の幅が広がっていくと思います。

やりたいことは何なのか、それを考えながら目的の処理を考える経験を積みましょう。