数独アシストV4 > 制作秘話

***********************************************************************************************

                数独アシストV4 制作秘話
                                                         Copyright(C) 2019 by しげるがもげる
***********************************************************************************************

◆はじめに
 このドキュメントには、制作に関わっての作者の思いや苦労が書いてあります。
 技術的な細かいことに興味のない方は、読み飛ばしてください。
 エクセルでマクロを組んでみようかなと思われる方は、読むと参考になる部分があるかもしれません。

◆制作秘話
 V3は,問題を記入し,準備ボタンを押すことで,そのマスに入る候補値を自動で示してくれます。
 したがって,もう候補値を書き出す作業はいらなくなりました。
 また,数字を決定していくと,それに従って候補値も更新されていくので,間違えることもありません。
 しかし,難解な問題を解く時,「仮置き数字を使いたい。」との声をいただきました。
 そこで,仮置きモードを追加したのが,V4です。

◆工夫や苦労など
 <解くことに専念できるように>
  「マウスでセルをクリックするだけで遊べる」ように作ってあります。
  左クリックで「確定」,ダブルクリックで「候補値に戻す」としました。
  これを行うには,イベントプロシージャを使います。
  しかし,左クリックは「SelectionChange」を使うため,どこでもクリックするたびに処理が始まってしまいます。
  それで,枠外,空欄,結合したセル,複数のセル選択は,除外するように条件付けをしました。
  このことは,ダブルクリックでも,無用なエラーが起こるのを防ぐ意味で取り入れました。
  それから,候補値も自動で更新するようにしてあります。

 <処理の高速化>
  エクセルの処理で時間がかかるのが,セルに書き込む処理です。
  この時間を短くするために,書き込む回数を少なくする工夫をしました。
  Variant型の変数を使って,数独枠全体のデータを,配列に読み込み,処理が終わったら配列を一気に書き込むようにしました。
  このことで,かなり処理が速くなりました。
  
 <正解かどうか判定する>
  正解かどうかを判定する部分は,縦,横,大マスで,全ての数字が揃っているかを調べます。
  これも始終処理していると,処理速度が遅くなってしまいます。
  それで,いつ,どのタイミングで処理するか考えました。
  ・完成する時は,左クリックしたときなので,そこに入れる。
  ・完成した時は,全ての数字が拡大マス(結合セル)なので,まずそれを調べて該当したら処理する。
  この2点を押さえて,無駄を極力無くしました。

 <数独枠内の数字を消してしまったときの処理>
  数独の枠内の数字を消してしまったとき,エラーにならないようにしました。
  ○候補値を消した場合・・・決定値から計算して更新するので,消しても大丈夫。
  ○決定値を消した場合・・・このまま処理するとエラーになるので,候補値の枠に戻し,候補値として扱っていく。

◆最後に
 ここまで、熱心に読んでくださってありがとうございました。
 プログラムを組んだことのない方には、わかりにくい内容だと思いますが、これを機会にエクセルの
 マクロに興味を持っていただければ、と思っています。
 エクセルは、本当に楽しいツールです。自分の思いや考えが表現できます。
 そんなエクセルに、日々、感謝です。