TOP > 数独アシストV10 > 制作秘話

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

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

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

◆制作秘話
 V3から,問題を記入し準備ボタンを押した段階で,候補値を計算するようにしました。
 また,候補値をクリックして確定値にすると,他の場所の候補値も自動で更新するようにしました。
 その後,これを使って頂いている方から,難解な問題を解く時「仮置き数字を使いたい。」との声をいただいたので,
 V9で仮置きモードを追加しました。
 また,自分でプレイしていると,途中で間違えておかしくなってしまうことがあったので,
 V10で「最初から」ボタンも増やしました。

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

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

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

 <最初からボタン>
  やっていて,どこかで間違えて手詰まりになった時,最初に戻れるようにボタンを作りました。
  当初,「保存」と「復元」ボタンの2つを作っていましたが,最初に戻ること限定にしたいと思いました。
  そこで,「準備」ボタンを押した時に保存するようにして,「保存」ボタンは表に出さないようにしました。
  また,保存する先は,見栄えを損なわないように別のシート(tmp)にしました。

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