数独(ナンプレ)を解くVBAに挑戦№4
数独をExcelマクロVBAで解いてみます№4、
前回は、愚直に人間の判定とおなじ事をVBAコード化してみましたが続きになります。
空き配列を探す
i1:配列の1次元のインデックス
i2:配列の2次元のインデックス
未回答があったら、True
すべて埋まっていたら、False
Function getBlank(ByRef SuAry() As Integer, ByRef i1 As Integer, ByRef i2 As Integer) As Boolean
For i1 = 1 To 9
For i2 = 1 To 9
If SuAry(i1, i2) = 0 Then
getBlank = True
Exit Function
End If
Next
Next
getBlank = False
End Function
数値の仮り置きを繰り返す・・・再帰処理
chkSuを使い、数値が入れられるかの判定をします。
入れられる場合は、配列にその数値を設定。
入れられない場合は、2、3、・・・と9までカウントアップする。
数値が入れられる場合は、
・配列に数値を入れ、
・自信をCall(再帰処理)
・Trueを設定し、Exit
9まで行って、いずれも入れられない場合は、
・配列に0を入れる
・Falseを設定
Function trySu(ByRef SuAry() As Integer) As Boolean
Dim i1 As Integer
Dim i2 As Integer
Dim su As Integer
If getBlank(SuAry(), i1, i2) = False Then
trySu = True
Exit Function
End If
For su = 1 To 9
If chkSu(SuAry(), i1, i2, su) = True Then
SuAry(i1, i2) = su
' Cells(i1, i2) = su
If trySu(SuAry) = True Then
trySu = True
Exit Function
End If
End If
Next
SuAry(i1, i2) = 0
' Cells(i1, i2) = ""
' DoEvents
trySu = False
End Function
次回は、メイン処理を書いて完成になります。
同じテーマ「マクロVBAサンプル集」の記事
アメブロの記事本文をVBAでバックアップする№1
数独(ナンプレ)を解くVBAに挑戦№1
数独(ナンプレ)を解くアルゴリズムの要点とパフォーマンスの検証№1
ナンバーリンク(パズル)を解くVBAに挑戦№1
ナンバーリンクを解くVBAのパフォーマンス改善№1
オセロを作りながらマクロVBAを学ぼう
他ブックへのリンクエラーを探し解除
Excelシートの複雑な計算式を解析するVBA
Excel将棋:マクロVBAの学習用(№1)
Excel囲碁:万波奈穂先生に捧ぐ
Excel囲碁:再起動後も続けて打てるように改造
新着記事NEW ・・・新着記事一覧を見る
シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)
列幅不足による###表示や指数表示を判定する|VBA技術解説(2023-07-12)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-07-04)
シート関数のCOUNTIFS,SUMIFS,MAXIFSと同じ処理|Power Query(M言語)入門(2023-02-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- 数独(ナンプレ)を解くVBAに挑戦№4
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。