第23講 数独を解くソフトVer.1の制作
第10話 並び替え(昇順・降順)Subプロシージャの再帰的呼び出し解答例
ダウンロード用参考ファイル
入門
再帰的呼び出し課題解答例
降順(大きい順)の場合
Dim a(15) As Byte, max As Byte
Private Sub CommandButton1_Click()
  Dim i As Byte
  For i = 0 To 14
    Cells(3, 5 + i) = Int(10 * Rnd)
  Next
End Sub
Private Sub CommandButton2_Click()
  Dim i As Byte
  For i = 0 To 14
    a(i) = Cells(3, 5 + i)
  Next
  f (0)
End Sub
Sub f(g As Byte)
  Dim i As Byte, ik As Byte, w As Byte
  max = 0
  For i = g To 14
    If a(i) > max Then
      max = a(i)
      ik = i
    End If
  Next
  If ik > g Then
    w = a(g)
    a(g) = a(ik)
    a(ik) = w
  End If
  If g + 1 < 15 Then
    f (g + 1)
  Else
    For i = 0 To 14
      Cells(5, 5 + i) = a(i)
    Next
  End If
End Sub
Private Sub CommandButton3_Click()
  Range("E3:S5").Select
  Selection.ClearContents
  Range("A1").Select
End Sub

実行例
入門
昇順(小さい順)の場合
Dim a(15) As Byte, min As Byte
Private Sub CommandButton1_Click()
  Dim i As Byte
  For i = 0 To 14
    Cells(3, 5 + i) = Int(10 * Rnd)
  Next
End Sub
Private Sub CommandButton2_Click()
  Dim i As Byte
  For i = 0 To 14
    a(i) = Cells(3, 5 + i)
  Next
  f (0)
End Sub
Sub f(g As Byte)
  Dim i As Byte, ik As Byte, w As Byte
  min = 100
  For i = g To 14
    If a(i) < min Then
      min = a(i)
      ik = i
    End If
  Next
  If ik > g Then
    w = a(g)
    a(g) = a(ik)
    a(ik) = w
  End If
  If g + 1 < 15 Then
    f (g + 1)
  Else
    For i = 0 To 14
      Cells(5, 5 + i) = a(i)
    Next
  End If
End Sub
Private Sub CommandButton3_Click()
  Range("E3:S5").Select
  Selection.ClearContents
  Range("A1").Select
End Sub
実行例
vb
ダウンロード用参考ファイル


さあ、いよいよすべての準備が終わりました。

入門
入門
条件の厳しい順ランク付けを行いましょう。



第9話へ 第11話へ

004
  


VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る