ExcelマクロVBAサンプル集
数独(ナンプレ)を解くVBAに挑戦№1

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
最終更新日:2017-11-26

数独(ナンプレ)を解くVBAに挑戦№1


数独は、一般に「ナンバープレース(ナンプレ)」と呼ばれ、外国では「sudoku」と呼ばれているようです、


この数独をExcelマクロVBAで解いてみようと言う事です。

解き方は、とにかく片っ端から数字を当てはめていくという、なんとも芸の無い方法です。(笑)

作ってみようと思い立ったのですが、そもそも数独はあまりやったことが無く、

効率的な解き方とかは、私は知らないので、手当たり次第に数値を当てはめていけば何とかなるだろうと・・・

とりあえず何とかなりましたので、掲載します。

数独のルール

・空いているマスに1~9のいずれかの数字を入れる。
・縦、横の各列及び、太線で囲まれた3×3のブロック内に同じ数字が複数入ってはいけない。

非常に単純なルールなので、プログラム練習には向いていますね。

このようなシートを用意します。

マクロ VBA サンプル画像

問題は、適当に探して下さい。

上記は、ネットで適当に探しました。

もし、著作権みたいなものがあるならゴメンナサイ。

実行結果

VBAを実行すると、以下のように回答がでます。
マクロ VBA サンプル画像
途中結果をセルに表示しなければ、

約1秒程度で回答がでます。

途中結果をセルに表示すると、かなり時間がかかります。

それだけ、試行錯誤の繰り返しだと言う事です。

でも、途中結果をセルに表示して、のんびり見ていると、

PCが試行錯誤している様が確認できて、結構楽しいです。

次回は、解法の具体的なアルゴリズムをもう少し掘り下げます。


№2へ続きます。

数独(ナンプレ)を解くVBAに挑戦 №1 №2 №3 №4 №5



数独(ナンプレ)を解くアルゴリズムの要点とパフォーマンスの検証
数独(ナンプレ)を解くアルゴリズムを例に、アルゴリズムの要点と、それによるパフォーマンスを検証します。一旦は完結したのですが、見直す機会があり、ほんの少し改善しました。赤太字の部分のみの変更です 考え方としては、候補数値の数が少ないところから攻めるのですが、候補数値の数が2個くらいがいくつかあるのが普通です。
こちらの最終完成版のダウンロード



同じテーマ「マクロVBAサンプル集」の記事

エクセルでファイル一覧を作成

VBAでサブフォルダ以下も含めて全てのファイル一覧を取得します。最初はサブフォルダは無視して、VBAにある関数とステートメントだけで作成します、その後に、FileSystemObjectで再帰処理をすることで、全てのサブフォルダも取得するようにしていきます。
アメブロの記事本文をVBAでバックアップする№6
後日追記 アメブロの仕様変更が度々あり、ここで紹介しているコードで取得できないものもあります、いつ仕様変更されるかわかりませんので、都度変更するのは結構大変です。あくまで、WEBページの取得技術方法として参考にしてください。アメブロにはバックアップ機能がありません。
数独(ナンプレ)を解くVBAに挑戦№5
数独(ナンプレ)を解くアルゴリズムの要点とパフォーマンスの検証№4
数独(ナンプレ)を解くアルゴリズムを例に、アルゴリズムの要点と、それによるパフォーマンスを検証します。一旦は完結したのですが、見直す機会があり、ほんの少し改善しました。赤太字の部分のみの変更です 考え方としては、候補数値の数が少ないところから攻めるのですが、候補数値の数が2個くらいがいくつかあるのが普通です。
ナンバーリンク(パズル)を解くVBAに挑戦№8
最後に、枠の大きさを10×10に固定せずに、Application.InputBoxでセル範囲を指定して実行するように修正したものを掲載しておきます。理論的には、大きさの制限はありませんが、10×18でやったところ、4時間半もかかってしまいました。
ナンバーリンクを解くVBAのパフォーマンス改善№3
以下が完成したVBAコードの全てになります。10×18で、18分 12×12で、16分 という結果となりました。もちろん、時間はたまたまテストした問題における時間です。解けるまでの時間は問題に大きく左右されますので、あくまで目安です。
オセロを作りながらマクロVBAを学ぼう
ExcelマクロVBAでオセロ(リバーシ)を作っていきながら、マクロVBAを学んで行きましょう。目的は、マクロVBAの学習であり、思考を整理しVBAでプログラミングする学習です。従って、強いソフトを作ることが目的ではありませんので、最近流行のAIなんちゃら…なんていうのは考えるつもりはありません。
他ブックへのリンクエラーを探し解除するマクロ(変更前)
掲載しているVBAコードの最初に掲載したものになります。どのように変更したかを比べてみると、プロシージャー分割の参考になると思います。標準モジュール ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
Excelシートの複雑な計算式を解析するVBAの関数構文
複雑な計算式を解析するVBAで使う「関数構文」シートのサンプルです。ほぼ全ての関数を網羅しています、中には漏れもあるかもしれませんが、解析VBAで使うに十分な関数が入っています。引数のない関数は意味がないのですが、一覧にあるものはそのまま入れています。


新着記事NEW ・・・新着記事一覧を見る

VBAでのCSVの扱い方まとめ|VBAサンプル集(11月9日)
VBAにおける変数のメモリアドレスについて|VBA技術解説(11月8日)
空文字列の扱い方と処理速度について(""とvbNullString)|VBA技術解説(1月7日)
Errオブジェクトとユーザー定義エラー|VBA入門(11月5日)
シングルクォートの削除とコピー(PrefixCharacter)|VBA技術解説(11月4日)
ユーザー定義型の制限とクラスとの使い分け|VBA技術解説(11月3日)
クリップボードに2次元配列を作成してシートに貼り付ける|VBA技術解説(11月1日)
VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)|VBA技術解説(10月31日)
VBAクラスのAttributeについて(既定メンバーとFor Each)|VBA技術解説(10月19日)
VBAの用語について:ステートメントとは|VBA技術解説(10月16日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • 数独(ナンプレ)を解くVBAに挑戦№1

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ