- 締切済み
プロムラミングが得意な人助けてください!
覆面算を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をループを利用して探す。(結果が得られたならそれが 覆面算の答えになっていることを確認する。)
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- azharu
- ベストアンサー率26% (164/609)
マクロのアルゴリズムについて、質問したいと言うことでしょうか。(違っていたら、ごめんなさい) 最初の問題について、 > ただし、ルールの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文を使ったほうが、変数にパラメータをそのままぶち込めるので、やりやすいかと思います。
お礼
アドバイスありがとうございました。