• ベストアンサー

Excel VBA 足し算の問題を自動生成したい

子供のために、「1+2」のような単純な足し算の問題をひたすら大量生成したいのですが、どう組むのが一番良いでしょうか。   A  B  C  D   1 乱数 + 乱数 = 2 乱数 + 乱数 = 3 乱数 + 乱数 = 私の頭で考える限りは、こんな感じのものを何行にも渡り繰り返させれば良いのかなあとぼんやり考えているのですが、乱数を使うプログラムが私にはなかなか難しく、うまくできません。 それと・・・ ・「まったく同じ問題が二行続けて出る」事だけは避けたいのですが、 その他の重複はまったく構わないという場合はどう組めば良いでしょうか。 ・「1桁+1桁」「2桁+1桁(と、2桁+1桁)」「2桁+2桁」それぞれのシートを1枚ずつつくりたいのですが、生成される数字の桁を指定する事はできるのでしょうか。 わからない事だらけで申し訳ないのですが、教えていただけると幸いです。

noname#101292
noname#101292

質問者が選んだベストアンサー

  • ベストアンサー
  • suz83238
  • ベストアンサー率30% (197/656)
回答No.2

Dictionaryを使ってみました。1+2と2+1は同じとしてますので、出ないようにしました。工夫の余地はあるでしょうが、まず使用してみてください。 Sub xxx() Dim s1 As Integer, s2 As Integer Dim c As Integer, n As Integer Dim f1 As Integer, f2 As Integer Cells.ClearContents Set dic = CreateObject("Scripting.Dictionary") n = InputBox("何問作りますか?") t1 = InputBox("1桁×1桁は1 2桁×1桁は2 2桁×2桁は3") c = 1 Do Until c > n z1: Select Case t1 Case 1 f1 = Rnd() * 8 + 1 f2 = Rnd() * 8 + 1 Case 2 f1 = Rnd() * 90 + 9 f2 = Rnd() * 8 + 1 Case 3 f1 = Rnd() * 90 + 9 f2 = Rnd() * 90 + 9 End Select s3 = f1 & "+" & f2 & "=" s4 = f2 & "+" & f1 & "=" If dic.Exists(s3) = True Or dic.Exists(s4) = True Then GoTo z1 dic.Add s3, s3 Cells(c, 1).Value = s3 c = c + 1 Loop Set dic = Nothing End Sub

その他の回答 (3)

  • nac03056
  • ベストアンサー率48% (203/419)
回答No.4

すでに答えが出ているようなので、蛇足としてVBAなしで出来ないかと考えてみました。役に立つかどうかわかりませんが、一応仕様は満たしていますのでご笑覧ください。^^ A列  B列 C列 =rand() 1  1 =rand() 1  2 =rand() 1  3 =rand() 1  4 =rand() 1  5 (省略) =rand() 9  7 =rand() 9  8 =rand() 9  9 という問題文のためのテーブルを作り、A列でソートをかけます。するとランダムに数字が並びますので上から10問を問題分として引っ張ってくれば当然同じ問題が出ることもなく完成です。もちろんソートの度に問題も変わります。 E列 F列 G列 H列 =B1  '+  =C1 '= (以下あと9問分下へ複写) もちろん2桁対応も長くなりますができますし、10+3のような問題は簡単過ぎるから入れたくないというならこのテーブルから消せばいいだけです。また繰り上がりが苦手というならそういう数字だけ残せば、苦手問題の特訓も可能です。 かなり力技っぽい感じもありますが一応動作はしています。

noname#101292
質問者

お礼

皆様大変ありがとうございます。 質問をしてからまったく時間がとれなくなってしまい、不本意ながら今日まで見られませんでした。 まだゆっくり読めていないのですが、立ててからかなり時間が経ってしまいましたので、ご迷惑を避けるためとりあえず締め切らせていただきます。 VBAを実際に書いてくださった方、VBAなしで行った方がこの際良いのではないかという方、両方いらっしゃいましたが、とてもよくわかりました。参考にさせていただきます。

回答No.3

>・「まったく同じ問題が二行続けて出る」事だけは避けたいのですが、 >その他の重複はまったく構わないという場合はどう組めば良いでしょうか。 乱数で作ったひとつ前の問題の値を変数で持って判定してあげればいいだけ。 >・「1桁+1桁」「2桁+1桁(と、2桁+1桁)」「2桁+2桁」それぞれのシートを1枚ずつつくりたいのですが、生成される数字の桁を指定する事はできるのでしょうか。 1の位、10の位をそれぞれ乱数で作るか、桁数チェックしてその桁になる様修正してあげればいいです。 あと、前乱数使ってた事あるんですがやりすぎると似通った結果になった気がするんで、何かしら工夫しないと駄目かもしれません。

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

質問振りから、VBA、関数の初心者と思うが、この問題をこなすだけの勉強をしてないと思われる。 現在では、質問者の身に過ぎた問題でしょう。 全面的に、1から10まで回答者がコードを書いてくれという形に結果的になる。 このコーナーは質問者の下請けをするものではない。 乱数なども、乱数であって、重複しないことを保証するものでは全く無い。 ーーーー 当面はエクセルで人間が操作を行って、作ってこなすのはどうかな。 2項演算なら ・1桁数の演算の場合 A列、B列で0-9までをエクセルの連続データで作成。 (A列は被加数、むしろB列は演算子、加数などをC列が良いかも) ・2桁数の演算の場合 A列、B列で10-99までをエクセルの連続データで作成。 ・3桁以上も同じ 3桁ぐらいなら選択したければ、ここで連番振って 乱数に当たる連番の行を抜き出すとか。VLOOUP関数などで。 演算子は約4種類自由に変えられるでしょう。 被加数、加数の順序が小ー>大になっていかにも機械作成というカタチに見えるので、乱数を振って乱数で並べ直す。 ーー もし乱数で同数が出てきたら、人間が適当に修正する覚悟で、自動化に拘って、難しくして、時間をいたずらにかけないように。 このコーナーへの質問などもそうだ。回答までに時間がかかる。 ーー 乱数はエクセル関数ではRAND、RANBETWEENで、関数の本か、WEBを調べれば、解説が腐るほど沢山出るでしょう。 そこまで踏み込んでから質問してください。

noname#101292
質問者

お礼

ありがとうございます。 まず、投稿してみたら質問文の字間が、意図と違ってしまって、わかりづらくなってしまったのをお詫びいたします。 おっしゃる通り、 A列 数字 B列 演算子 C列 数字 の配置にしたら良いのではないか、という内容の事を質問文には書いてありました。 私はおっしゃる通りの初心者でございます。 不勉強はそうなのですが、全面的にコードを書いてくれというつもりはなく、No.3様のように、断片的な情報でいっこうにありがたいのです。 もちろん自力で調べてはみたのですが、どう情報を拾って良いかわからない状態でしたので、ここでお返事をいただければ、もう少し詳しく調べる糸口がつかめるかと思いました。直接の答えでなくとも、わかりやすい解説サイトなどを示してくださったりでも良いのです。 手動でという案ですね。 確かにVBAをつくった方がコストがかかる場合もあると思います。 勉強にと思っても、今の私にはステップが違うという事なのかも知れませんが、もうしばらく調べてみたいと思います。

関連するQ&A

  • エクセルでの足し算(特定数を除きたい)

    エクセルでの足し算(特定数を除きたい) 行/セル A B C ・・・・ 1    1 3 7 2    2 1 1 3    3 2 1 上記のように一桁の数字が入ったデータがあるのですが、 このA~Cを足し算するときに、「7以上」の数字は足し算させたくありません。 例: 1行目・・・ A1+B2 = 4 (C1は無視) このような場合はどのような指定をすれば良いでしょうか。

  • EXCELでの、3桁の擬似乱数生成方法について質問です。

    EXCELでの、3桁の擬似乱数生成方法について質問です。 エクセルで、3桁の擬似乱数をいくつもランダムに生成するにはどのようにすればよろしいでしょうか? 重複する可能性も含んだ擬似乱数の生成方法、宜しくお願い致します。

  • 乱数を使って条件付きのたし算の問題を作りたい

    129+438=567 のように1から9までの数字を1回ずつ使って成り立つたし算の問題を作りたいのです。5つほど見つけたのですが、乱数を使って作ることはできないでしょうか。成り立つ問題が他にもっとあるか知りたいのです。よろしくお願いします。

  • エクセルで3ケタの乱数

    今度くじ引き大会をするのに3ケタの数字を250名ほどに配りたいのですが、それぞれの数字が重複なくかつ各桁数の数字が重複しないで乱数をエクセルで生成する方法を教えてください。(例えば、101,221,199などは除外したいです) RAND,RANDBETWEEN関数を使ってみましたが、重複してしまうし、221などのような各桁で数字が重複してしまうものができてしまうのでうまくいきません。 よろしくお願いします。

  • VBAでこのプログラムの作り方

    最近VBAを勉強し始めた初心者です。 Excel上でコマンンドボタン1つで D18~H18からD22~H22の5×5の25マス(Aシート) と M18~Q18からM22~Q22の5×5の25マス(Bシート) それぞれに1~75の乱数を同時に発生させ一定時間、数字を回転させたあと数字を表示させたいのですがどのようなプログラムを組めばよろしいですか? ただしAシート内での数字の重複、Bシート内での数字の重複は起きないものです。 AシートとBシートの数字の重複はOKです。 数字はAシート25マス、Bシート25マス全て同時に回転させたいです。 乱数を回転させ数字を表示させるプログラムは For = i = 0 To 100  Range("○○").Value = Int(Rnd * 75) + 1 Next i です。 よろしくお願いします。

  • VBA-指定した範囲で重複しない乱数を生成したい

    指定した範囲(例:100~200)から10個、重複しない乱数を生成したいのですが、どのようなマクロを書けばよいでしょうか。 ループを使い、重複があれば結果を一度消して再生成、と思ったのですが、時間がかかる上Excelが落ちることがあります。 できるだけ簡単なコードでこのプログラムを書きたいのですが、知恵をお貸しください。 コード自体の投稿、または関数名での説明、どちらでもOKです。

  • テーブルの自動生成

    プログラミング/初心者です。 aspを勉強しております。ご教授下さい。 aspで<table>を自動作成したいとおもっております。 やりたいことは、以下です。 <table> <tr> <td></td> </tr> <table> 行、列をプログラムで生成 ・3列目で折り返すてきな... ・行、列を数字で指定したら<table>が生成される  (プログラム内に 行=5 列=5 など) 今は、( do , loop , response.write )程度しか理解できていません。 お願いします。 余談なのですが、なにか、よい参考書など御座いましたらお教え下さい。

  • 暗算 自動生成ソフト

    電卓で、5~6ケタの10口以上の足し算の練習をしたいのですが、そのような問題を生成してくれるフリーソフトはありませんか? 123,456 345,678 . . . って感じに表示されるものがベターです。

  • パスワード生成プログラム(JAVA)

    JAVAでパスワード生成プログラムを作りたいのですが、 乱数だけだと重複などがあってちゃんとしたものが作れません。 重複がなくて、文字列の長さが同じ(長さはどのくらいでもいい)パスワードを生成できるプログラムを作る上でよいアドバイスがあったら、教えていだたきたいのですが。よろしくお願いします。 また、ソースそのものがあれば、公開して頂けないでしょうか?

    • ベストアンサー
    • Java
  • Excelのワークシートを自動生成2

    こんにちは、 昨日、ワークシートの自動生成方法を教えて頂いたものです。 皆様からの回答で逆にやりたいことがはっきりしたので再度質問させてください。 ExcelでSheet1のA列の1行目、2行目・・・入力最終行までの各行の文字を ワークシート名にした新しいブックを、自動生成したいです。 昨日は作成するワークシート数を指定しましたが 作成ワークシート数が変わることも想定したく思います。 ご教授のほど、何卒よろしくお願いします。ト

専門家に質問してみよう