ExcelマクロVBAサンプル集 | ナンバーリンクを解くVBAのパフォーマンス改善2 | Excelマクロの実用サンプル、エクセルVBA集と解説



最終更新日:2014-05-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




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

アメブロの記事本文をVBAでバックアップする6
数独(ナンプレ)を解くVBAに挑戦5
数独(ナンプレ)を解くアルゴリズムの要点とパフォーマンスの検証4
ナンバーリンク(パズル)を解くVBAに挑戦8

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

Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)
ファイルの一覧取得・削除(File)|Google Apps Script入門(1月24日)
フォルダの一覧取得・作成・削除(Folder)|Google Apps Script入門(1月24日)
フォルダとファイルを扱う(DriveApp)|Google Apps Script入門(1月24日)
スプレッドシートが非常に遅い、高速化するには|Google Apps Script入門(1月17日)
画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.変数とデータ型(Dim)|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.VBAのFindメソッドの使い方には注意が必要です|ExcelマクロVBA技術解説



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

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


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

    ↑ PAGE TOP