[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を用います。
そして数値の交換が行われたら、プラン名も同じように交換して、数値の交換を追随します。
交換結果は
ちゃんと料金とプランの対応が合っていますね。
まとめ
今回はバブルソートにひと手間加えて、表の対応関係を維持したままソートを行ってみました。
こういうちょっとした改良を練習していくと、少しずつアルゴリズム作成の幅が広がっていくと思います。
やりたいことは何なのか、それを考えながら目的の処理を考える経験を積みましょう。