読売新聞の日曜版に『数独』というゲームがあり将棋のNHK杯を見ながら解いていました。
数独とは9×9、3×3のブロックに1~9までの数字を縦、横の列とブロック内に重複をしないようにあいているマスに入れる遊びです。
いろいろ解き方はあると思いますが、自分の解き方は空欄のマスに入る候補の数字を考えます。紙に9×9のマスを書き、その中に候補になる数字を書き入れて、たて、横、ブロック内を重複しないように数字を選びます。
1回目は解く挑戦から解きましたが、2回目は9×9のマスを書いた時点で面倒くさくなり、エクセルで解こうと考えました。
あくまで、紙に候補の数字を書いて考えるのをエクセルの表に候補の数字を表示させて、数字を選んで問題を解く、遊びの手伝いです。
最初エクセルだけで作ったのですが、問題の登録、呼び出しがエクセルだけだと出来ないので、ファイルのアクセス用にVBAを使いました。
VBAとは「Visual Basic for Applications」と言ってエクセルで使えるVisual Basicというコンピュータ言語です。プログラムの実行のためのメニュー画面、入力画面や選択画面など普段よく見る画面を作りことが出来ます。
始めの画面です。右上に候補の数字が表示されます。たて、横、ブロック内での候補の数字を見て数字がひとつしかないのを選びます。左上の青いマスに数字を入力します。入力すると候補の数字も自動で変わります。候補の数字をよく見て選んでいきます。
候補がひとつしかないときはマスは青色で表示されますのでわかりやすいです。
エクセルに表を割り振って画面を作りました。
![](https://blogimg.goo.ne.jp/user_image/63/69/1acd99e92f76e0255c10472ab36a3043.jpg)
メニューはVBAです。ユーザーフォームです。ユーザーフォームにコマンドボタンを配置して、ボタンを押してプログラムを実行します。
ピンクの空いているところにこのメニューが置かれます。
![](https://blogimg.goo.ne.jp/user_image/59/f3/f5e0944c88c3142d070116a46561c3d0.jpg)
数字はここに入力します。
![](https://blogimg.goo.ne.jp/user_image/19/86/7570fbce7da3372712704cbe42547567.jpg)
わからなくなったらヒントもあります。
![](https://blogimg.goo.ne.jp/user_image/5a/5e/2746e503b263d122c8ef9368617c7476.jpg)
メニュー画面で[ヒントON]のボタンを押すと候補数字の表示の外側にピンクで重複していない数字があることを表します。
よこの列の場合は左側、縦の列の場合は下側、3×3のブロックの場合はその下側です。
![](https://blogimg.goo.ne.jp/user_image/26/a2/e69f9cfdfdf4321a93aa0a5353d6db9e.jpg)
左下に問題を表示しています。わかっている数字の個数もわかります。
![](https://blogimg.goo.ne.jp/user_image/58/e0/6697af0b98ea7dad590f3ef239441828.jpg)
ちょっとした情報もあります。
この場合、まだ入力してしていなくて、あいているマスは53個あることがわかります。
候補になっている数字の個数が表示されるので数字を探すヒントになるはずです。3が少ないので見つけ易いことがわかります。
![](https://blogimg.goo.ne.jp/user_image/0c/7e/a9a5f0d428fc7c95759b3674a6802e02.jpg)
問題を入力する画面です。新規の問題は最初にメニューの[問題登録を登録する]のボタンを押して問題を入力して登録します。
![](https://blogimg.goo.ne.jp/user_image/15/5b/1d83b6bbabcaac82e930950022ff667f.jpg)
登録された問題を[過去問を遊ぶ]のボタンを押して問題を選んで遊びます。
途中でやめる場合は、[保存して終了]か[保存しないで終了]のボタンを押してやめることが出来ます。
プログラミングはユーザーの使用に関してあらゆるエラーを想定して、エラーメッセージを作ることが絶対条件だと思っています。しかし、これは個人用の遊びの手伝いで作ったので最終的に間違ったときのエラー処理はしていません。だって、最後にエラーが出たら「違ったか」で相応の対処をしてやり直すだけですから。
1回は解かないと正解がわからないのが欠点かもしれませんが、あくまで遊びの手伝いだからこれでいいかな。
数独とは9×9、3×3のブロックに1~9までの数字を縦、横の列とブロック内に重複をしないようにあいているマスに入れる遊びです。
いろいろ解き方はあると思いますが、自分の解き方は空欄のマスに入る候補の数字を考えます。紙に9×9のマスを書き、その中に候補になる数字を書き入れて、たて、横、ブロック内を重複しないように数字を選びます。
1回目は解く挑戦から解きましたが、2回目は9×9のマスを書いた時点で面倒くさくなり、エクセルで解こうと考えました。
あくまで、紙に候補の数字を書いて考えるのをエクセルの表に候補の数字を表示させて、数字を選んで問題を解く、遊びの手伝いです。
最初エクセルだけで作ったのですが、問題の登録、呼び出しがエクセルだけだと出来ないので、ファイルのアクセス用にVBAを使いました。
VBAとは「Visual Basic for Applications」と言ってエクセルで使えるVisual Basicというコンピュータ言語です。プログラムの実行のためのメニュー画面、入力画面や選択画面など普段よく見る画面を作りことが出来ます。
始めの画面です。右上に候補の数字が表示されます。たて、横、ブロック内での候補の数字を見て数字がひとつしかないのを選びます。左上の青いマスに数字を入力します。入力すると候補の数字も自動で変わります。候補の数字をよく見て選んでいきます。
候補がひとつしかないときはマスは青色で表示されますのでわかりやすいです。
エクセルに表を割り振って画面を作りました。
![](https://blogimg.goo.ne.jp/user_image/63/69/1acd99e92f76e0255c10472ab36a3043.jpg)
メニューはVBAです。ユーザーフォームです。ユーザーフォームにコマンドボタンを配置して、ボタンを押してプログラムを実行します。
ピンクの空いているところにこのメニューが置かれます。
![](https://blogimg.goo.ne.jp/user_image/59/f3/f5e0944c88c3142d070116a46561c3d0.jpg)
数字はここに入力します。
![](https://blogimg.goo.ne.jp/user_image/19/86/7570fbce7da3372712704cbe42547567.jpg)
わからなくなったらヒントもあります。
![](https://blogimg.goo.ne.jp/user_image/5a/5e/2746e503b263d122c8ef9368617c7476.jpg)
メニュー画面で[ヒントON]のボタンを押すと候補数字の表示の外側にピンクで重複していない数字があることを表します。
よこの列の場合は左側、縦の列の場合は下側、3×3のブロックの場合はその下側です。
![](https://blogimg.goo.ne.jp/user_image/26/a2/e69f9cfdfdf4321a93aa0a5353d6db9e.jpg)
左下に問題を表示しています。わかっている数字の個数もわかります。
![](https://blogimg.goo.ne.jp/user_image/58/e0/6697af0b98ea7dad590f3ef239441828.jpg)
ちょっとした情報もあります。
この場合、まだ入力してしていなくて、あいているマスは53個あることがわかります。
候補になっている数字の個数が表示されるので数字を探すヒントになるはずです。3が少ないので見つけ易いことがわかります。
![](https://blogimg.goo.ne.jp/user_image/0c/7e/a9a5f0d428fc7c95759b3674a6802e02.jpg)
問題を入力する画面です。新規の問題は最初にメニューの[問題登録を登録する]のボタンを押して問題を入力して登録します。
![](https://blogimg.goo.ne.jp/user_image/15/5b/1d83b6bbabcaac82e930950022ff667f.jpg)
登録された問題を[過去問を遊ぶ]のボタンを押して問題を選んで遊びます。
途中でやめる場合は、[保存して終了]か[保存しないで終了]のボタンを押してやめることが出来ます。
プログラミングはユーザーの使用に関してあらゆるエラーを想定して、エラーメッセージを作ることが絶対条件だと思っています。しかし、これは個人用の遊びの手伝いで作ったので最終的に間違ったときのエラー処理はしていません。だって、最後にエラーが出たら「違ったか」で相応の対処をしてやり直すだけですから。
1回は解かないと正解がわからないのが欠点かもしれませんが、あくまで遊びの手伝いだからこれでいいかな。
![ブログランキング・にほんブログ村へ](http://www.blogmura.com/img/originalimg/0000258197.jpg)
![人気ブログランキングへ](http://image.with2.net/img/banner/banner_22.gif)
![](http://blogranking.fc2.com/ranking_banner/a_04.gif)
※コメント投稿者のブログIDはブログ作成者のみに通知されます