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