私は、プロジェクトとしてExcelでVBAを使用して、スドクパズルを自動的に解決するプログラムを作成しようとしていました。実行時エラーを引き起こすループ中のReDim 9
ループを通過した後、配列に正しい値が割り当てられないという問題が発生しました。私は3x3マトリックスのためにこの設計作業をしましたが、9x3x3(IE Aの完全なスドクパズル)に問題があります。
私はReDimのドキュメントをチェックして、 。このため、最初の2つのディメンションのサイズを変更する必要がないようにロジックを処理しようとしました。私はまだ配列から値を呼び出そうとしているときに、配列の範囲を過度に超えていると誤っています。私は、デバッガを使用してプログラムをステップバイステップで実行し、すべての値が正しく割り当てられていることを確認しました。私はそれが働いていない理由について私の知恵の終わりにあるので、良い人が私に与えることができるアドバイスはありますか?
Dim guessArray() As integer
Dim blockArray() As Integer
Dim blockCheckArray() As integer
Dim correctArray() As Integer
Dim lenBlockArray (3, 3, 1) As Integer
Dim lenBlockCheck(3, 3, 1) As integer
Dim lenBlockCheckArray (3, 3, 1) As integer
Dim counter as integer
'Putting the sudoku into an array
ReDim guessArray (9, 9) As integer
For i = 1 to 9
For j = 1 to 9
guessArray (i, j) = Cells (i, j)
Next
Next
'Creating an array to find the numbers that are in a quadrant
ReDim blockCheckArray(3, 3, 1) As integer
For a = 1 to 3
For b = 1 to 3
For i = 1 to 3
For j = 1 to 3
'Looking through each quadrant for any number != 0 and dumping them into an array
If guessArray (i + ((a - 1) * 3), j + ((b - 1) * 3)) <> 0 Then
lenBlockArray (a, b, 1) = lenBlockArray (a, b, 1) + 1
ReDim Preserve blockArray (3, 3, lenBlockArray (a, b, 1)) As Integer
blockArray (a, b, lenBlockArray (a, b, 1)) = guessArray (i + ((a - 1) * 3), j + ((b - 1) * 3))
End If
Next
Next
Next
Next
'Writing out the numbers in the quadrants for debugging
counter = 1
For a = 1 to 3
For b = 1 to 3
For i = 1 to lenBlockArray (a, b, 1)
Cells (counter, i + 10) = blockArray (a, b, i)
Next
Next
Next
私は、これはStackOverflowの上の私の最初のポストであり、それは(私は私のダウンタイムで仕事でこのプロジェクトをやっている)私の携帯からだそうエクセル2010を使用しているフォーマットや任意の仕様に変更があれば私が得ているエラーについては、お気軽にお問い合わせください。
'lenBlockArray()'関数がありません。あなたのコードを援助する人が助けてくれるように投稿してください。 –
@AdamVincentがソートされました。ありがとうございます。モバイルでの投稿の危険性。 – Hutsan