• 締切済み

プロムラミングが得意な人助けてください!

覆面算を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をループを利用して探す。(結果が得られたならそれが 覆面算の答えになっていることを確認する。)

みんなの回答

  • azharu
  • ベストアンサー率26% (164/609)
回答No.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文を使ったほうが、変数にパラメータをそのままぶち込めるので、やりやすいかと思います。

always6010
質問者

お礼

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

関連するQ&A

  • Visual Basicで覆面算を計算するにはどうしたらいいのでしょうか?

    以下のような問題がとける方、回答をお願いします。 ○ 問題    (文字にあらゆる数字を順に入れて、正解を探す。)  ただし、ルールの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をループを利用して探す。(結果が得られたならそれが 覆面算の答えになっていることを確認する。)

  • エクセル2000-マクロでの文字置き換えの質問です。

    エクセル2000を使用しています。    A    B    C    D       ・・ X    Y 1 1  とまと  4  なし       1  とまと 2                      2    なす 3 2  なす   5  りんご     5   きゅうい 4                      6   ソーセージ 5 3  きゅうり 6  えだまめ    6                     -------------------------------------------------------------- 上のような表があります。 A列C列には番号(固定番号)が入っています。 列の間には空白のセルが入っています。(X・Y列は空白セルなし) B列D列には品名が入っています。 X列の数字がA列・C列にあっていたらYの文字をB列・D列に、 それぞれ、置き換えを行いたいです。 X列の数字とY列の文字は、その都度かわります。 上記のような処理をマクロで行うことは、可能でしょうか? 説明がうまくできていないかも知れませんが、よろしくお願いします。

  • 先ほど質問したものです。 VLOOKとIF関数の合体バージョンは可能ですか?

    先ほど、 1  1~10  A 2 11~20  B 3 21~30  C 4 31~40  D    : ★「C1セルには数字を入れます。その数字が8ならば、8は1~10の中の数字なので、D1のセルにAと表示される。15ならばBと入力したいです。 と質問し、 ↓ A列の数値を 1 11 21 31 : 191 のように入力しなおします。 D列の関数は  =VLOOKUP(C1,$A$1:$B$20,2) とお答えをいただいた者です。 更に、計算させたいことが出来てしまいました。 1~10の数字が入力された場合に表示させる文字が「A」から400に。11~20の数字が入力された場合に表示させる文字が300になりました。 1  1~10  400 2 11~20  300 3 21~30  C 4 31~40  D C1セルに、25と入力された場合はD1セルにCと表示。 これは教えていただきましたが、 もし、5と入力した場合、D1のセルには400と表示されますが、表示される項目が1~10の中の数字だった場合、5%を掛けたいのですが、出来ますでしょうか? 教えていただいた関数=VLOOKUP(C1,$A$1:$B$20,2)で、400と表示されますが、1~10までの数字を入力した場合のみ、400×5%で「20」と表示させたいのです。 よろしくお願いします。

  • エクセルで一致するをセルを参照して入力したい

    お世話になります。 わかりにくいタイトルで申し訳ないのですが以下の場合について教えてください。 A列に1,2,3,4,5・・・というように重複しない数字が入っています。 C列にも1,3,4・・・など重複しない数字が入っています。(1と3の間に空白セルはない) D列には任意の文字が入っています。 C列の数字と同じ数字は必ずA列には存在します。(逆にA列の数字がすべてC列にあるわけではない) ここであいているB列にその左のA列と同じ数字をC列から探し、その右側のD列の文字を入力したいのです。 (A列と同じ数字がC列にない場合は空白にする。) 例 A1:1 C列で「1」が入っているセルがC1、D1:みかん の場合 B1:みかん とする A2:2 C列に2がない場合 B2:空白 A3:3 C列で「3」が入っているセルがC2、D2:りんご の場合 B3:りんご とする この場合B列にはどのような計算式を入れておけばよいのでしょうか。 よろしくお願いします。 Excel2002です。

  • エクセルの質問です

    エクセルの質問です 「Z」という文字を数字の「0」と認識させたうえで、「C列=A列-B列」を計算させる方法や関数はありますか? 例)  A1=200 B1=Z のとき、 C1=200  A2=Z B2=200のとき、 C2=-200  A3=200 B3=200のとき、 C3=0  A4=Z B4=Z のとき、 C4=0 ※結果が出てくるC列セルの「0」は「Z」と認識させない(A列・B列のZだけを0と認識させる)

  • エクセルの文字列操作:縦に繰り返す方法

    A、B、C列に半角英数文字、D列に数字が入っています。 A、B、C列の文字が繋がり、D列の数字分繰り返されるような計算式等を考えているのですが、 繰り返しの条件が縦に繰り返さなければならない為、四苦八苦しています。 イメージとしましては、例えば A1セルが「a」B1セルが「b」、C1セルが「c」、D1セルの数字が「3」 A2セルが「AA」B2セルが「BB」、C2セルが「CC」、D2セルの数字が「5」 だとすると、 abc abc abc AABBCC AABBCC AABBCC AABBCC AABBCC といった繰り返し結果が、別の列(○1~○7)に出来て欲しいのです。 最終的には、この結果をCSVで書き出して、バーコードとして専用プリンタで印刷しようというのが目的です。 何かよい手段は無いでしょうか?あるいはエクセルでは不可能なのでしょうか? 知恵をお貸しください。 宜しくお願い致します。

  • エクセルの質問です。

    エクセルの質問です。 例えば、A1・B1・C1セル全てに数字(文字列)が入力されたら、Z1セルにAと表示される。 また、F1・G1・H1・I1セル全てに数字が入力されたらZ1セルにBと表示される。 上記のように指定したセル全てに入力されるとそれぞれA・B・C・Dと4つパターンで表示される ようにしたいのですが、わかりません。 おそらくIF関数で条件を組み合わせて作るのだと思いますが、どなたかご教授お願いいたします。

  • エクセルで数字の文字列を計算させたくないのですが、うまく出来ません。良い方法はないでしょうか?

    エクセル2003で、下記のようにセルに入力したとします。    A   B   C 1  10   20 2  11  ’21 3  13   14 4 ※B2は「’」をつけて数字の文字列として認識させています。 B4のセルに、=SUM(B1:B3)とすると、うまく34となってくれますが、 C2のセルに、=A1+B2とすると、32となってしまいます。 当方としては、B2を文字と認識してほしいので、求めている答えは11です。 数字の文字列を文字列のまま処理して、計算させない方法はあるでしょうか? 皆様、ご教授願います。

  • エクセルの関数式について

    エクセルについてご教授をお願い致します。 C列のセルに入っている文字列があります。 (例えばA-111やB-111Gなど) D列のセルの中から、C列の文字列を検索して、 C列の文字列の次の文字が数字だった場合のみ、 その数字1文字だけを削除する場合はどのようにしたら宜しいでしょうか。 (例えばA-1113の3の部分や、B-111G1の1の部分です。 数字じゃない場合や、次の1文字以降(2文字目)に数字があっても 削除対象ではありません。 あくまで、C列の文字列の次の数字1文字のみです。 (例えばA-11131の場合は3だけ削除でA-1111となります。  Bー111G1Gの場合は、1だけ削除でB-111GGとなります。) また、同じDセル内にCの文字列が重複している場合もあり、 その場合でも全ての文字に同じ条件を適応します。 説明がわかりにくいとは思いますが、 この説明でわかって頂ける先生がおられましたら ご教授お願いします。

  • 関数等使ってできますか??

    エクセルもしくはAccessを使用して以下のことできますか? エクセルのA~D列に数字もしくは、文字が入力されているとします。 それを、B列に上からデータを並べたいのです。 関数などでできる方法がありましたら教えてください。 よろしくお願いします。 ●イメージ図 【加工前】 _A__B__C__D__ 1|a|b|c| 2|a|d| | 3|b|d|a| 4|c| | | ※A~Dはセル列 ※a~dは数字もしくは文字 ※一番左の数字は通し番号   ↓↓ 【加工後】 _A__B__C__D__ 1|a| 2|a| 3|b| 4|c| 1|b| 2|d| 3|d| 4| | 1|c| 2| | 3|a| 4| |