第23講 数独を解くソフトVer.1の制作
第9話 並び替え(昇順・降順)解答例
ダウンロード用参考ファイル
入門
前話課題解答例
降順(大きい順)の場合
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, j As Byte, a(15) As Byte, max As Byte, jk As Byte, w As Byte
  For i = 0 To 14
    a(i) = Cells(3, 5 + i)
  Next
  For i = 0 To 14
    max = 0
    For j = i To 14
      If a(j) > max Then
        max = a(j)
        jk = j
      End If
    Next
    If jk > 0 Then
      w = a(i)
      a(i) = a(jk)
      a(jk) = w
    End If
  Next
  For i = 0 To 14
    Cells(5, 5 + i) = a(i)
  Next
End Sub
Private Sub CommandButton3_Click()
  Range("E3:S5").Select
  Selection.ClearContents
  Range("A1").Select
End Sub
実行例
入門
昇順(小さい順)の場合
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, j As Byte, a(15) As Byte, min As Byte, jk As Byte, w As Byte
  For i = 0 To 14
    a(i) = Cells(3, 5 + i)
  Next
  For i = 0 To 14
    min = 100
    For j = i To 14
      If a(j) < min Then
        min = a(j)
        jk = j
      End If
    Next
    If jk > 0 Then
      w = a(i)
      a(i) = a(jk)
      a(jk) = w
    End If
  Next
  For i = 0 To 14
    Cells(5, 5 + i) = a(i)
  Next
End Sub
Private Sub CommandButton3_Click()
  Range("E3:S5").Select
  Selection.ClearContents
  Range("A1").Select
End Sub

実行例
VBA
ダウンロード用参考ファイル


今回、for文の2次元ループで処理しましたが、
1次元目
  For i = 0 To 14
の部分はSubプロシージャの再帰的使用で実現することもできます。
Subプロシージャの再帰的呼び出しによる場合は、
配列を利用する際にはグローバル配列にしておくとよいでしょう。
また、minとmaxも同様にグローバル変数にするとよいでしょう。
今度はそれを考えてください。




第8話へ 第10話へ

004
  


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

数学研究室に戻る