VBAサンプル集
ナンバーリンク(パズル)を解くVBAに挑戦№1

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
最終更新日:2017-11-26

ナンバーリンク(パズル)を解くVBAに挑戦№1


ナンバーリンクというパズルがあります、


これをエクセルVBAで解いてみようと思います、

数独(ナンプレ)に続くパズルVBA解法の第二弾です。
数独は、一般に「ナンバープレース(ナンプレ)」と呼ばれ、外国では「sudoku」と呼ばれているようです、この数独をExcelマクロVBAで解いてみようと言う事です。解き方は、とにかく片っ端から数字を当てはめていくという、なんとも芸の無い方法です。

ナンバーリンクをご存じない方は、、

ウィキペディア
ナンバーリンクのおためし問題

このあたりをお読みください。

なお、サンプルで掲載した問題は、ナンバーリンクのおためし問題の問題1からお借りしました。

こちらでは、回答も掲載されているので、ネタばれにならないと思いましたので。
※もし、著作権等の問題があれば、サンプルは直ちに削除いたします。


ナンバーリンク問題
マクロ VBA サンプル画像

ナンバーリンクは、ルール上の制限が少ないので、

縦横の枠数に制限はないと思われます。

今回は、初心者向きの10×10を使用します。


ルール

・盤面にある同じ数字同士を線でつなぐ。
・線は縦横に引き、斜めには引かない(斜めに接したマス同士を直接線で結ばない)。
・線は交差や枝分かれをしない。また、1つのマスに2本以上の線が入ることも無い。

回答結果

マクロ VBA サンプル画像


つまり、問題の表から、回答結果の表を作成するVBAを作成することになります。


パズルに限らず仕事でも同じです。

問題・課題が与えられたら、その問題・課題の本質を見極め、解決へのアプローチ方法を模索します。


この時、いきなり複雑なことを考えず、少しずつ掘り下げていきます。

このナンバーリンクを解くために必要な機能を考えます。

・未処理開始セルの検索
 ・開始セルは、左上から数値セルを探す
 ・終了セルは、数値を指定して右下から探す
 →未処理開始セルが無くなったら終了
・線を伸ばせるセルの検索
 →線を伸ばせるセルが無くなったら、一つ手前に戻る
 →終了セル(同一数値)に達したら次の開始セルに進む

私は、このように考えてみました。

開始位置の選択は、数値の小さい順等も考えられますが、

ルールからして、数値の大小は意味を成しませんので、左上から処理すればよいはずです。

では、これらのVBAコード書いてみましょう。

№2へ続きます。


ナンバーリンク(パズル)を解くVBAに挑戦 : №1 №2 №3 №4 №5 №6 №7 №8



ナンバーリンクを解くVBAのパフォーマンス改善
「ナンバーリンク(パズル)を解くVBAに挑戦」で作成したVBAでナンバーリンクを解く事には成功しました、しかし、10×10なら数分で解けるものの、10×18でやったところ、4時間半もかかってしまいました。12×12では、待ちきれずに途中で止めてしまいました。
こちらの最終完成版のダウンロード



同じテーマ「VBAサンプル集」の記事

エクセルでファイル一覧を作成
アメブロの記事本文をVBAでバックアップする№1
数独(ナンプレ)を解くVBAに挑戦№1
数独(ナンプレ)を解くアルゴリズムの要点とパフォーマンスの検証№1
ナンバーリンク(パズル)を解くVBAに挑戦№1
ナンバーリンクを解くVBAのパフォーマンス改善№1
オセロを作りながらマクロVBAを学ぼう
他ブックへのリンクエラーを探し解除
Excelシートの複雑な計算式を解析するVBA


新着記事NEW ・・・新着記事一覧を見る

ツイッターで出されたVBAのお題をやってみた|エクセル雑感(1月13日)
イベントプロシージャーの共通化(Enter,Exit)|ユーザーフォーム入門(1月13日)
Rangeオブジェクトの論理演算(差集合と排他的論理和)|VBA技術解説(1月10日)
イベントプロシージャーの共通化|ユーザーフォーム入門(1月7日)
コントロールの動的作成|ユーザーフォーム入門(1月6日)
Evaluateメソッド(文字列の数式を実行します)|VBA技術解説(1月5日)
エクスポート(PDF/XPS)|VBA入門(1月2日)
分析関数(OVER句,WINDOW句)|SQL入門(12月25日)
取得行数を限定するLIMIT句|SQL入門(12月21日)
外部ライブラリ(ActiveXオブジェクト)|VBA入門(12月21日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • ナンバーリンク(パズル)を解くVBAに挑戦№1

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
    掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ