VBAサンプル集
ナンバーリンクを解くVBAのパフォーマンス改善№2

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

ナンバーリンクを解くVBAのパフォーマンス改善№2


細かい解説は省きます、結構難しいプログラムとなってしまいましたので。


プロシージャーの概要のみ記載しておきます。

main
入り口となるメインのプロシードャー
getStart
開始位置を取得するプロシージャー
getEnd
終了位置を取得するプロシージャー
chkEnd
指定位置が終了位置かを判断するプロシージャー
RowColAjust
行・列の数値を指定範囲内に収めつつ、次の位置へ進むためのプロシージャー
getAdvance
進む先を決めるプロシージャー、中核となるプロシージャーです。
dispCell
配列をシートに表示するプロシージャー
chkAdvance
次の進む先の候補が、進んでよいかどうかを判断します。
chkRoute
今処理中の数値より先の数値の開始位置を見つけます。
chkRoute2
chkRoutより渡された数値の開始と終了が空白セルでつながっているかを判断
再帰呼び出しで、次々に空白セルを辿ります。
chkClose
次の候補位置に進んだとしたら、その周りの空白領域に出口が無くなっていないか判断
chkClose2
指定位置の空白領域に出口(他の数値が)があるかどうかを判断します
再帰呼び出しで、次々に空白セルを辿ります。から呼び出す
chkClose3
小さな袋小路かどうかの判断
getBeforeCell
指定位置にくる直前の位置を取得、dispCellから呼び出す
getAfterCell
指定位置が進んだ直後のを取得、dispCellから呼び出す


ここまでは、前作で作成したプロシージャーです。



これらの内容も修正を加えています。

そして、新規に追加したプロシージャーです。

chkClose4
四辺の一つとなりに達したとき、辺との隙間の1セルを通過できる数値のは一つの数値のみなので、
2つ以上のの数値が通過しなければならない状態かを判定
chkClose5
一つのみ空白セルとして取り残されている場合、隣のセルが同一数値が存在しなければ、
その空白セルは使用できないので、これを判定
chkUsed
すでに使用されている数値かの判定
chkAry91
chkClose4で作成した数値の配列を基に、
空白領域内に出て行く必要のある数値が複数ある場合にエラーとする
chkAry92
chkClose4で作成した数値の配列を基に、
空白領域内に同一数値が存在していない場合はエラーとする


重複してチェックされているパターンもありそうですが、



問題パターンが無限に存在するので、

とにかく考えられるパターンを片っ端から組み込んだ漢字になってます。


では、完成したVBAコードです。

№3へ続きます。


ナンバーリンクを解くVBAのパフォーマンス改善 : №1 №2 №3



こちらの最終完成版のダウンロード



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

数独(ナンプレ)を解くVBAに挑戦№1
数独(ナンプレ)を解くアルゴリズムの要点とパフォーマンスの検証№1
ナンバーリンク(パズル)を解くVBAに挑戦№1
ナンバーリンクを解くVBAのパフォーマンス改善№1
オセロを作りながらマクロVBAを学ぼう
他ブックへのリンクエラーを探し解除
Excelシートの複雑な計算式を解析するVBA
Excel将棋:マクロVBAの学習用(№1)
Excel囲碁:万波奈穂先生に捧ぐ
Excel囲碁:再起動後も続けて打てるように改造
エクセルVBAで15パズルを作ってみた


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

import文(パッケージ・モジュールのインポート)|Python入門(9月24日)
例外処理(try文)とexception一覧|Python入門(9月23日)
リスト内包表記|Python入門(9月22日)
Pythonの引数は参照渡しだが・・・|Python入門(9月21日)
lambda(ラムダ式、無名関数)と三項演算子|Python入門(9月20日)
関数内関数(関数のネスト)とスコープ|Python入門(9月18日)
関数の定義(def文)と引数|Python入門(9月18日)
組み込み関数一覧|Python入門(9月17日)
辞書(dict型)|Python入門(9月16日)
入力規則への貼り付けを禁止する|VBA技術解説(9月16日)


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

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」をお願いいたします。
本文下部へ