• 締切済み

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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#2です。同じ数字を別記号に割り当ては回避だと思うので 下記に修正。 VBAを使うことが前提。 Sub test02() For a = 0 To 9 For b = 0 To 9 For c = 0 To 9 For d = 0 To 9 x = (c * 100 + a * 10 + b) + (b * 100 + a * 10 + c) y = d * 1000 + a * 100 + b * 10 + a If x = y Then If d = 0 Or c = 0 Or b = 0 Or (a - b) * (b - c) * (c - d) * (d - a) * (a - c) * (a - d) * (b - d) = 0 Then Else MsgBox a & " " & b & " " & c & " " & d End If End If Next d Next c Next b Next a End Sub ーーー 結果は 2571 3761 4951の3つになった。まだ条件があるかな。 MsgBox a & " " & b & " " & c & " " & d はセルに回答の値をセットするなら 先頭行にK=1 MsgBox a & " " & b & " " & c & " " & d に変えて、下記5行を置き換えて入れる。 Cells(k,"A")=a Cells(k,"B")=b Cells(k,"C")=c Cells(k,"D")=d K=K+1

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

この質問コーナーでは宿題を質問として出すことは規約上遠慮してもらうことになっている。 宿題なら先生の回答、本の問題なら解答が載っているのではありませんか。 ===   c a b +) b a c ----------  d a b a の例で 原始的方法で Sub test02() For a = 0 To 9 For B = 0 To 9 For c = 0 To 9 For d = 0 To 9 x = (c * 100 + a * 10 + B) + (B * 100 + a * 10 + c) y = d * 1000 + a * 100 + B * 10 + a If x = y Then If d = 0 Or c = 0 Or B = 0 Then '先頭桁は0で無い Else MsgBox a & " " & B & " " & c & " " & d End If End If Next d Next c Next B Next a End Sub ーーー a,b,c,dはそれぞれ 0191 1381 2571 3761  4951 と出たがどうだろうか。

always6010
質問者

お礼

ありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>Visual Basicで と >アクティブシート(Sheet1) とあるのですがVBなのかExcelVBAなのか不明。 これって課題なのでは?

関連するQ&A

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

    覆面算を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) 以下の計算が成り立つとき、A×D - B×Cを求めよ。ただし、A、B、C、Dは1から9までの自然数である。 (2)暗号文「970」は「○□△☆×」、「2220」は「△□△☆×」、「2930」は「☆△□○×」で表される。このとき、「781」はどのように表されるか。

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

    エクセル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です。 数字の文字列を文字列のまま処理して、計算させない方法はあるでしょうか? 皆様、ご教授願います。

  • エクセル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」と表示させたいのです。 よろしくお願いします。

  • Excelの計算式で困っています。

    お世話になります。 まず、セル A1 B1  C1 D1(下方に連続)が有ります。 A1には(D1・D2・N・J・Dr)の5種類の文字列が限定で入り、B1には一定範囲の文字列が入ります。 C1には数字が入り、D1にD1・D2・N・J・Drの4種類の文字列に対して、対応する値をC1とかけ算した結果を表示したいのです。 それだけなら、IF関数で出来るのですが、セルA1~下の位置に文字列"D1・D2・N"の3種類がB1との3カ所以上有った場合、掛け率が違うように計算したいのです。 ”D1&○○○(○は同じ文字と考えてください)”や”D2&○○○(○は同じ文字と考えてください)”や”N&○○○(○は同じ文字と考えてください)”が3つ以上有った場合、セルXの数値を掛ける。そうでない場合は、D1やD2やNに対応したそれぞれの掛け率(別セル・絶対番地)を掛けるように。また、J・Drは単純に掛け率のセルと掛けるという次の計算式を作ってみました。 IF($A1="J",$C1*$BB$4, IF($A1="Dr",$C11*$BB$5, IF($A1="D1",$C11*$BB$1, IF($A1="D2",IF((SUMIF($AU$11:$AU$110,$B1,$BP$11:$BP$110)>=3),$C1*$BB$6, IF($A1="N",IF((SUMIF($AU$11:$AU$110,$B1,$BP$11:$BP$110)>=3),$C1*$BB$6, $P11*$BB$3))))))) ※SUMIFの検索範囲はセルA1&セルB1を表示させて、いくつ出たかを表示させる別番地になります。 BB1~BB6は掛け率を表しています。(後で変更が合ったときに式を全部変えなくても済むように) それで問題点は、セルA1の位置に文字列”D1"や"D2”を入れると、正しく計算できるのですが、セルA1の位置に文字列”N"や"J""Dr"を入れると、”FLASE”が表示され、正しい答えが表示されません。 それと、IF関数に対してカッコの数が多いように思うのですが、この式を入れると、削っても勝手にExcelの方で、足されてしまいます。 また、BB1~BB3及びBB6は%表示、BB4~BB5は整数というのも何か関係が有るのでしょうか? ------------------------------ |  A      |    B      |    C    |   D         | ------------------------------ |  D1      |   ○○○    | 10000    |      2000     | ------------------------------ |  D2     |    ○○●   | 20000     |     3000     | ------------------------------ |  N      |   ○○○   | 15000     |      1750     | ------------------------------ |  D2     |   ○○○   | 12000     |      1800     | ------------------------------ |  J      |   ○○●   |     1     |  300     | ------------------------------ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 上記の内容で、B列の"○○○"と”D1”または”D2”または”N”の組み合わせが3カ所以上有った場合だけBB6、それ以外は、それぞれの”D1”なら”D1”に対応する掛け率を表示させたいのです。 解りにくい説明で申し訳ないのですが、何かヒントだけでも御願いできればと思います。 よろしくお願いします。

  • エクセルの計算

    エクセル初心者です。(エクセル2000) 簡単な表で、b5のセルに10.50(小数点以下、2けたそのまま表したいので セルの表示形式を文字列にした)、c5のセルに5.50をいれ、d5のセルで b5-c5 の値に100を掛けるの式で答えを出しました。  =(b5-c5) * 100 で答えは500ですが、d5 のセルの表示形式は標準にしたので、500とでるが、文字列にすると計算できません。 この場合、b5 と c5 の表示形式は、どれを使ったらいいのでしょうか?(標準にして、ツールバーのアイコン、「小数点表示桁あげ」で、10.50 、5.50 とするのがいいのでしょうか?) また、セルの左上隅の緑の三角は、文字列表示にしたときにでる印でしょうか? エクセルご存知のかた、お教え願えないでしょうか。

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

    お世話になります。 わかりにくいタイトルで申し訳ないのですが以下の場合について教えてください。 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と認識させる)

  • EXCELの計算式(%に応じて点数を割り振る)

    以下のようなEXCELのセルがあります。 A列 任意の数字 B列 任意の数字 C列 任意の数字 D列 C列÷(A列-B列)の結果を、小数点2ケタ以下切り捨て E列 D列の数字を10倍した値 この時、D列、E列にはどのような数式が入るのでしょうか? 関数がよくわかりません。 恐れ入りますが教えて頂けますでしょうか。

専門家に質問してみよう