第9講 プロシージャの学習

第9話 1ブロック数独を実現するプログラム
数独
魔方陣
VBA
を実現するプログラム例
Private Sub CommandButton1_Click()
  Dim n As Byte
  n = Cells(5, 3)
  f (n)
End Sub
Sub f(n As Byte)
  Dim i As Byte, j As Byte, k As Byte, a(5, 5) As Byte
  For i = 0 To n - 1
    For j = 0 To n - 1
      a(i, j) = Int(n * Rnd) + 1
      h = 1
      If j > 0 Then
        For k = 0 To j - 1
          If a(i, k) = a(i, j) Then
            j = j - 1
            h = 0
          End If
        Next
      End If
      If h = 1 Then
        If i > 0 Then
          For k = 0 To i - 1
            If a(k, j) = a(i, j) Then
              i = i - 1
              h = 0
            End If
          Next
        End If
      End If
    Next
  Next
  For i = 0 To n - 1
    For j = 0 To n - 1
      Cells(7 + i, 3 + j) = a(i, j)
    Next
  Next
End Sub
Private Sub CommandButton2_Click()
  Rows("6:200").Select
  Selection.ClearContents
  Range("A1").Select
End Sub
参考ファイル


ところで、コードを次のように変更したらどうなるでしょうか。
Private Sub CommandButton1_Click()
  Dim n As Byte
  n = Cells(5, 3)
  f (n)
End Sub
Sub f(
m As Byte)
  Dim i As Byte, j As Byte, k As Byte, a(5, 5) As Byte
  For i = 0 To m - 1
    For j = 0 To m - 1
      a(i, j) = Int(m * Rnd) + 1
      h = 1
      If j > 0 Then
        For k = 0 To j - 1
          If a(i, k) = a(i, j) Then
            j = j - 1
            h = 0
          End If
        Next
      End If
      If h = 1 Then
        If i > 0 Then
          For k = 0 To i - 1
            If a(k, j) = a(i, j) Then
              i = i - 1
              h = 0
            End If
          Next
        End If
      End If
    Next
  Next
  For i = 0 To m - 1
    For j = 0 To m - 1
      Cells(7 + i, 3 + j) = a(i, j)
    Next
  Next
End Sub



第8話へ 第10話



トップ

初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba マクロ 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門

数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ