VBA

ExcelVBAでナンプレ(数独)を解いてみよう

VBAでナンプレ(数独)を解くマクロを作ってみました。

人間がナンプレを解くときの考え方をそのままプログラムにしたものなので、人間が解けるパズルは解けるし、そうでないパズルはお手上げしてしまう「人間味あふれるマクロ」を楽しんでみてくださいませ。

動作イメージはこちらです。人間が頭を悩ませる問題でも、VBAを使えば、こんな風に一瞬で解けちゃうんですよ!

ナンプレの解き方

このマクロでは、3つの解き方をプログラムにします。

【解法1】数字探し

セルの重複禁止範囲を調べて、そのセルに入る「数字を探す」解き方です。

【例題】A1セルに入る数字を探します。

「3×3のエリア」「行」「列」には5以外の数字がすべて存在しているため、A1セルには数字の5しか入りません。

sudoku1

【解法2】セル探し(3×3エリア)

【例題】A1セルを始点とする3×3エリア(赤枠)に注目します。

  • 空白セルは4個あり、数字2,5,7,8のいずれかが入る
  • A2セル・C2セル:同じ【行】に数字の5が存在する
  • B3セル:同じ【列】に数字の5が存在する

以上より、数字の5はA1セルにしか入らないことがわかります。

sudoku2

【解法3】セル探し(行・列エリア)

【例題】1行(赤枠)を1単位として解読します。

  • 1行目には空白セルが4個あり、1,4,6,7のいずれかが入る
  • D1セル・F1セル:同じエリアに数字の1が存在する
  • G1セル:同じ列に数字の1が存在する

以上より、数字の1はA1セルにしか入らないことがわかります。

sudoku3-1

同じように「列」に注目します。1列(赤枠)を1単位として解読します。

sudoku3-2

VBAでナンプレを解く

解法1,2,3をループの中に挟みます。

 

ナンプレ全体像

VBAのコード

アクティブシートのA1~I9セル(9×9)のパズルを解くコードです。

下記4つのモジュールに分けて貼り付けます。

  • 共通モジュール
  • 解法1モジュール
  • 解法2モジュール
  • 解法3モジュール

ExcelシートのA1~I9セル(9×9)にパズルを用意して、共通モジュールの「VBAでナンプレを解く()」を実行すると、パズルが解けます。

共通モジュール

解法1モジュール

解法2モジュール

解法3モジュール

 

以上です!