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
数独(ナンプレ)を解くVBAに挑戦№1
数独(ナンプレ)を解くアルゴリズムの要点とパフォーマンスの検証№1
ナンバーリンク(パズル)を解くVBAに挑戦№1
ナンバーリンクを解くVBAのパフォーマンス改善№1
オセロを作りながらマクロVBAを学ぼう
他ブックへのリンクエラーを探し解除
Excelシートの複雑な計算式を解析するVBA


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

「VBAで導関数を求めよ」ツイッターのお題をやってみた|エクセル雑感(2月9日)
Property {Get|Let|Set} ステートメント|VBA入門(2月9日)
フィボナッチ数列(再帰呼び出し)|VBA技術解説(2月8日)
エクセルで連立方程式を解く(MINVERSE,MMULT)|エクセル雑感(2月7日)
スピルって速いの?スピルの速度について|VBA技術解説(2月4日)
スピルでVBAの何が変わったか|VBA技術解説(2月3日)
スピルについて|エクセル入門(2月3日)
エクセルで「もういくつ寝るとお正月」|エクセル雑感(1月29日)
VBAの少数以下の演算誤差について|VBA技術解説(1月29日)
VBAで写真の撮影日時や音楽動画の長さを取得する|VBA技術解説(1月23日)


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

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




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


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



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