欢迎光临散文网 会员登陆 & 注册

用excel和vba解数独

2023-06-26 06:14 作者:青春在线吗  | 我要投稿

好的,下面是解答数独过程的VBA代码。它会依次对A区域和B区域中的所有数独游戏进行求解,并将解答填充回对应的区域中。


```

Sub SolveSudokus()

  '解答A区域中的所有数独游戏

  Dim i As Integer

  For i = 1 To 4

    '获取数独游戏所在的位置和大小

    Dim topLeft As Range

    Set topLeft = Range("A" & (3 * i - 2) & ":I" & (3 * i))

    '读取数独游戏的数据

    Dim data(1 To 81) As Integer

    For j = 1 To 9

      For k = 1 To 9

        If IsNumeric(topLeft.Cells(j, k).Value) Then

          data((j - 1) * 9 + k) = topLeft.Cells(j, k).Value

        Else

          data((j - 1) * 9 + k) = 0

        End If

      Next k

    Next j

    '解答数独游戏

    Dim solver As New SudokuSolver

    solver.Solve data

    '将解答填充回对应的区域中

    For j = 1 To 9

      For k = 1 To 9

        If data((j - 1) * 9 + k) > 0 Then

          topLeft.Cells(j, k).Value = data((j - 1) * 9 + k)

        End If

      Next k

    Next j

  Next i


  '解答B区域中的所有数独游戏

  For i = 1 To 9

    '获取数独游戏所在的位置和大小

    Dim topLeft As Range

    Set topLeft = Range("H" & (i + 1) & ":P" & (i + 9))

    '读取数独游戏的数据

    Dim data(1 To 81) As Integer

    For j = 1 To 9

      For k = 1 To 9

        If IsNumeric(topLeft.Cells(j, k).Value) Then

          data((j - 1) * 9 + k) = topLeft.Cells(j, k).Value

        Else

          data((j - 1) * 9 + k) = 0

        End If

      Next k

    Next j

    '解答数独游戏

    Dim solver As New SudokuSolver

    solver.Solve data

    '将解答填充回对应的区域中

    For j = 1 To 9

      For k = 1 To 9

        If data((j - 1) * 9 + k) > 0 Then

          topLeft.Cells(j, k).Value = data((j - 1) * 9 + k)

        End If

      Next k

    Next j

  Next i

End Sub

```


这个VBA过程主要是依次对A区域和B区域中的所有数独游戏进行求解,首先读取数独游戏的数据,然后调用`solver.Solve`方法进行求解,最后将解答填充回对应的区域中。

用excel和vba解数独的评论 (共 条)

分享到微博请遵守国家法律