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

Select Caseでの短絡評価(ショートサーキット)の使い方|VBA技術解説(1月3日)
VBA100本ノック 迷宮編:巡回セル問題|VBA練習問題(12月31日)
VBA100本ノック 58本目:番号リストを簡潔にした文字列で返す|VBA練習問題(12月30日)
VBA100本ノック 57本目:ファイルの更新日時|VBA練習問題(12月29日)
VBA100本ノック 56本目:数式内の自身のシート名を消す|VBA練習問題(12月28日)
VBA100本ノック 55本目:他ブックのマクロを起動|VBA練習問題(12月26日)
VBA100本ノック 54本目:シートのChangeイベント|VBA練習問題(12月25日)
VBA100本ノック 53本目:テーブルの扱いと年齢計算|VBA練習問題(12月23日)
VBA100本ノック 52本目:複数シートの一括印刷|VBA練習問題(12月22日)
VBA100本ノック 51本目:シート一覧と印刷ページ数|VBA練習問題(12月21日)


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

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




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


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



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