プロが教えるわが家の防犯対策術!

覆面算をExcelのマクロ機能で表したいのですが、以下のような問題がとける方、マクロ部分の回答をお願いします。

○ 問題 
  (文字にあらゆる数字を順に入れて、正解を探す。)
 ただし、ルールの1~3を満足するプログラムとすること。
  c a b
+) b a c
----------
 d a b a
 答えなどは次のように表示するようにプログラミングする。

² 一番初めに、アクティブシート(Sheet1)の中のすべての
セルの内容をクリアする。
² 次にセルA1に「覆面算の答え」の文字列を、A2~G2に、
a, b, c, d, x, y, zの文字を記入する。
² プログラムの実行(ルール1~3を考慮した、繰り返し文)に
より、最初に覆面算を満足するよう得られたa, b, c, d,
x, y, z(整数)をA3~G3に記入する。
² 複数の答えがある場合には、以降に得られたa, b, c, d,
x, y, zをA4~G4、A5~G5、¢ ¢ ¢ に順に記入するよう
にする。
² 最後に、答えの記されている次の行のA列目のセルに「答
えは」、C列目のセルに「通り」、B列目のセルに実際の答
えの数(何通りか)を記すようにしてプログラムを終える。
※ 上の文中で文字列を囲っている「」のセル中への表示は不要。
loop(繰り返し処理)文やfor next 文を使う。

ここからは参考までに。

  a b
 +)b a
--------
 a a c
² 覆面算のルール
 ルール1 : 文字はそれぞれの桁の文字を表す。
 ルール2 : 異なる文字は異なる数字を表し、同じ文字は同じ
数字を表す。
 ルール3 : 左端の数字は0ではない。
 ルール4 : (パズルとしては)答えが1つになる。
このルールに従うと、上記の覆面算の答えは次のようになる。
  1 9
 +)9 1
--------
 1 1 0

○ 覆面算を力技で解く。
(文字にあらゆる数字を順に入れて、正解を探す。)
 例えば
  a b b
 +)d d c
----------
 a a a d
の覆面算を解くことを考える。
 覆面算中に現れる3桁(また4桁)の数値は次のように考える。
上記の3桁abbは、a¤100+b¤10+b と考え、これをxとす
る。同様にddc をy、aaad をz としたときx+y=zとなる、
a,b,c,dをループを利用して探す。(結果が得られたならそれが
覆面算の答えになっていることを確認する。)

A 回答 (1件)

マクロのアルゴリズムについて、質問したいと言うことでしょうか。

(違っていたら、ごめんなさい)

最初の問題について、
> ただし、ルールの1~3を満足するプログラムとすること。

とありますが、そのルール1~3とは、後述の問題にある、

>² 覆面算のルール
 ルール1 : 文字はそれぞれの桁の文字を表す。
 ルール2 : 異なる文字は異なる数字を表し、同じ文字は同じ
数字を表す。
 ルール3 : 左端の数字は0ではない。
 ルール4 : (パズルとしては)答えが1つになる。

を指しているのでしょうか。(定義は先に提示しましょうね)

また、セルの番地を示されても、ちょっと、わからないですよ。要は、

  c a b
+) b a c
----------
 d a b a

の答えを見つけ出すマクロを作れたらよい、と想像して以下に書きます。


●下ごしらえ
・変数abcdの値を設定するセルをそれぞれ用意する。
・cab、bac、dabaの三桁、四桁の数字を作る関数を用意。
例えば、cabなら、(c*100)+(a*10)+b
(注意:変数は、式にするときは該当のセルを指定するのは言うまでもなし)

●マクロの流れ
・abcdに、順に0~9の数字が入るようなマクロを作る(しらみ潰しに答えを求めることを前提にしています。このマクロは組めますよね?)
・bcdには、0を飛ばす設定を入れる(ルール3により。しかし、マクロが複雑になるだけなので、この設定は必ずしも入れなくてよし)

変数abcdの値が変わるたびに、cabの値のセルと、bacの値のセルとを足した結果が、dabaの値のセルと同じになるかどうかをチェックする。「=」が成り立ったら、ループを中断(終了)させる。

ループは、For文を使ったほうが、変数にパラメータをそのままぶち込めるので、やりやすいかと思います。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。

お礼日時:2008/07/22 09:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!