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 ・・・新着記事一覧を見る

Variantの数値型と文字列型の比較|エクセル雑感(7月1日)
VBAのVariant型について|VBA技術解説(6月30日)
VBAのString型の最大文字数について|エクセル雑感(6月20日)
VBAで表やグラフをPowerPointへ貼り付ける|VBAサンプル集(6月19日)
アクティブシート以外の表示(Window)に関する設定|VBA技術解説(6月17日)
マクロ記録での色のマイナス数値について|エクセル雑感(6月16日)
ツイッター投稿用に文字数と特定文字で区切る|エクセル雑感(6月15日)
日付の謎:IsDateとCDate|エクセル雑感(6月14日)
IFステートメントの判定|エクセル雑感(6月13日)
インクリメンタルサーチの実装|ユーザーフォーム入門(6月12日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




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


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



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