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

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

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


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


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

数独(ナンプレ)に続くパズルVBA解法の第二弾です。
数独をExcelマクロVBAで解いてみます№5、メイン処理を書いて完成になります。メイン処理のSub シートのA1~I9を配列(1To9,1To9)に入れる。trySuを呼ぶ…再帰プロシージャー 配列(1To9,1To9)をシートのA1~I9に入れる。

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

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

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

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

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


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

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

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

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


ルール

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

回答結果

マクロ VBA サンプル画像


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


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

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


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

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

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

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

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

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

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

№2へ続きます。


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



ナンバーリンクを解くVBAのパフォーマンス改善
以下が完成したVBAコードの全てになります。10×18で、18分 12×12で、16分 という結果となりました。もちろん、時間はたまたまテストした問題における時間です。解けるまでの時間は問題に大きく左右されますので、あくまで目安です。
こちらの最終完成版のダウンロード



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

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


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

文字列結合&でコンパイルエラーになる理由|VBA技術解説(9月19日)
Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)


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

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



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

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


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




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