数独アシストV4 > 制作秘話
*********************************************************************************************** 数独アシストV4 制作秘話 Copyright(C) 2019 by しげるがもげる *********************************************************************************************** ◆はじめに このドキュメントには、制作に関わっての作者の思いや苦労が書いてあります。 技術的な細かいことに興味のない方は、読み飛ばしてください。 エクセルでマクロを組んでみようかなと思われる方は、読むと参考になる部分があるかもしれません。 ◆制作秘話 V3は,問題を記入し,準備ボタンを押すことで,そのマスに入る候補値を自動で示してくれます。 したがって,もう候補値を書き出す作業はいらなくなりました。 また,数字を決定していくと,それに従って候補値も更新されていくので,間違えることもありません。 しかし,難解な問題を解く時,「仮置き数字を使いたい。」との声をいただきました。 そこで,仮置きモードを追加したのが,V4です。 ◆工夫や苦労など <解くことに専念できるように> 「マウスでセルをクリックするだけで遊べる」ように作ってあります。 左クリックで「確定」,ダブルクリックで「候補値に戻す」としました。 これを行うには,イベントプロシージャを使います。 しかし,左クリックは「SelectionChange」を使うため,どこでもクリックするたびに処理が始まってしまいます。 それで,枠外,空欄,結合したセル,複数のセル選択は,除外するように条件付けをしました。 このことは,ダブルクリックでも,無用なエラーが起こるのを防ぐ意味で取り入れました。 それから,候補値も自動で更新するようにしてあります。 <処理の高速化> エクセルの処理で時間がかかるのが,セルに書き込む処理です。 この時間を短くするために,書き込む回数を少なくする工夫をしました。 Variant型の変数を使って,数独枠全体のデータを,配列に読み込み,処理が終わったら配列を一気に書き込むようにしました。 このことで,かなり処理が速くなりました。 <正解かどうか判定する> 正解かどうかを判定する部分は,縦,横,大マスで,全ての数字が揃っているかを調べます。 これも始終処理していると,処理速度が遅くなってしまいます。 それで,いつ,どのタイミングで処理するか考えました。 ・完成する時は,左クリックしたときなので,そこに入れる。 ・完成した時は,全ての数字が拡大マス(結合セル)なので,まずそれを調べて該当したら処理する。 この2点を押さえて,無駄を極力無くしました。 <数独枠内の数字を消してしまったときの処理> 数独の枠内の数字を消してしまったとき,エラーにならないようにしました。 ○候補値を消した場合・・・決定値から計算して更新するので,消しても大丈夫。 ○決定値を消した場合・・・このまま処理するとエラーになるので,候補値の枠に戻し,候補値として扱っていく。 ◆最後に ここまで、熱心に読んでくださってありがとうございました。 プログラムを組んだことのない方には、わかりにくい内容だと思いますが、これを機会にエクセルの マクロに興味を持っていただければ、と思っています。 エクセルは、本当に楽しいツールです。自分の思いや考えが表現できます。 そんなエクセルに、日々、感謝です。