第23講 数独を解くソフトVer.1の制作
第2話 数独を解くソフトVer.0の完成

コード例
Dim m(9, 9), cn As Byte
Private Sub CommandButton1_Click()
  hj = Timer
  cn = 0
  dainyuu
  f (0)
  ow = Timer
  Cells(3, 22) = "作成時間は"
  Cells(3, 23) = ow - hj
  Cells(3, 24) = "秒です。"
End Sub
Sub dainyuu()
  Dim i As Byte, j As Byte
  For i = 0 To 8
    For j = 0 To 8
      m(i, j) = Cells(3 + i, 2 + j)
    Next
  Next
  For i = 0 To 8
    For j = 0 To 8
      If m(i, j) < 1 Then
        m(i, j) = 0
      End If
    Next
  Next

End Sub
Sub f(g As Integer)
  Dim x As Byte, y As Byte
  Dim i, j, k, zy, zx As Byte
  y = Int(g / 9)
  x = g Mod 9
  If m(x, y) > 0 Then
    If g + 1 < 81 Then
      f (g + 1)
    Else
      For j = 0 To 8
        For k = 0 To 8
          Cells(13 + j, 2 + k) = m(j, k)
        Next
      Next
      cn = cn + 1
      If cn = 1 Then Exit Sub
    End If
    Exit Sub
  End If
  Dim xa As Byte, ya As Byte, xs As Byte, ys As Byte, kk As Byte, kkk As Byte
  xa = x Mod 3
  ya = y Mod 3
  xs = Int(x / 3)
  ys = Int(y / 3)
  kk = 9 * Rnd()
  For i = 1 To 9
    kkk = (kk + 4 * i) Mod 9 + 1
    m(x, y) = kkk
    
    For j = 0 To 8
      If j <> x Then
        If m(x, y) = m(j, y) Then GoTo tobi
      End If
    Next
   
    For j = 0 To 8
      If j <> y Then
        If m(x, y) = m(x, j) Then GoTo tobi
      End If
    Next
    For j = 0 To 2
      For k = 0 To 2
        If 3 * xs + j <> x And 3 * ys + k <> y Then
          If m(x, y) = m(3 * xs + j, 3 * ys + k) Then GoTo tobi
        End If
      Next
    Next
    If g + 1 < 81 Then
      f (g + 1)
    Else
      For j = 0 To 8
        For k = 0 To 8
          Cells(13 + j, 2 + k) = m(j, k)
        Next
      Next
      cn = cn + 1
      If cn = 1 Then Exit Sub
    End If
    If cn = 1 Then Exit Sub
tobi:
  Next
  m(x, y) = 0
End Sub
Private Sub CommandButton2_Click()
  Rows("3:11").Select
  Selection.ClearContents
  Rows("13:22").Select
  Selection.ClearContents
  Cells(2, 1).Select
End Sub
実行例
入門
ダウンロード用参考ファイル

このVer.0でも書籍やサイト上にある難問をほとんど1秒以内で解けてしまいます。
しかし、このVer.0にも苦手な問題があります。
vba
この問題は私のパソコンで34秒も要してしまいます。
Ver.0の改良をしていきますが、その前に次話では詳しくプログラムを解説しましょう。

第1話へ 第3話へ

004
  

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

数学研究室に戻る