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
Excel将棋:マクロVBAの学習用(№1)
Excel囲碁:万波奈穂先生に捧ぐ
Excel囲碁:再起動後も続けて打てるように改造


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

列全体を指定する時のRangeとColumnsの違い|ツイッター出題回答 (2023-09-24)
シートのActiveXチェックボックスの指定方法|ツイッター出題回答 (2023-09-24)
ByRef引数の型が一致しません。|ツイッター出題回答 (2023-09-22)
シートコピー後のアクティブシートは何か|ツイッター出題回答 (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)


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

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入門




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


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



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