用excel和vba解数独
好的,下面是解答数独过程的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`方法进行求解,最后将解答填充回对应的区域中。

