子供のために、「1+2」のような単純な足し算の問題をひたすら大量生成したいのですが、どう組むのが一番良いでしょうか。
A B C D
1 乱数 + 乱数 =
2 乱数 + 乱数 =
3 乱数 + 乱数 =
私の頭で考える限りは、こんな感じのものを何行にも渡り繰り返させれば良いのかなあとぼんやり考えているのですが、乱数を使うプログラムが私にはなかなか難しく、うまくできません。
それと・・・
・「まったく同じ問題が二行続けて出る」事だけは避けたいのですが、
その他の重複はまったく構わないという場合はどう組めば良いでしょうか。
・「1桁+1桁」「2桁+1桁(と、2桁+1桁)」「2桁+2桁」それぞれのシートを1枚ずつつくりたいのですが、生成される数字の桁を指定する事はできるのでしょうか。
わからない事だらけで申し訳ないのですが、教えていただけると幸いです。
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を調べれば、解説が腐るほど沢山出るでしょう。
そこまで踏み込んでから質問してください。
ありがとうございます。
まず、投稿してみたら質問文の字間が、意図と違ってしまって、わかりづらくなってしまったのをお詫びいたします。
おっしゃる通り、
A列 数字
B列 演算子
C列 数字
の配置にしたら良いのではないか、という内容の事を質問文には書いてありました。
私はおっしゃる通りの初心者でございます。
不勉強はそうなのですが、全面的にコードを書いてくれというつもりはなく、No.3様のように、断片的な情報でいっこうにありがたいのです。
もちろん自力で調べてはみたのですが、どう情報を拾って良いかわからない状態でしたので、ここでお返事をいただければ、もう少し詳しく調べる糸口がつかめるかと思いました。直接の答えでなくとも、わかりやすい解説サイトなどを示してくださったりでも良いのです。
手動でという案ですね。
確かにVBAをつくった方がコストがかかる場合もあると思います。
勉強にと思っても、今の私にはステップが違うという事なのかも知れませんが、もうしばらく調べてみたいと思います。
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
No.3
- 回答日時:
>・「まったく同じ問題が二行続けて出る」事だけは避けたいのですが、
>その他の重複はまったく構わないという場合はどう組めば良いでしょうか。
乱数で作ったひとつ前の問題の値を変数で持って判定してあげればいいだけ。
>・「1桁+1桁」「2桁+1桁(と、2桁+1桁)」「2桁+2桁」それぞれのシートを1枚ずつつくりたいのですが、生成される数字の桁を指定する事はできるのでしょうか。
1の位、10の位をそれぞれ乱数で作るか、桁数チェックしてその桁になる様修正してあげればいいです。
あと、前乱数使ってた事あるんですがやりすぎると似通った結果になった気がするんで、何かしら工夫しないと駄目かもしれません。
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のような問題は簡単過ぎるから入れたくないというならこのテーブルから消せばいいだけです。また繰り上がりが苦手というならそういう数字だけ残せば、苦手問題の特訓も可能です。
かなり力技っぽい感じもありますが一応動作はしています。
皆様大変ありがとうございます。
質問をしてからまったく時間がとれなくなってしまい、不本意ながら今日まで見られませんでした。
まだゆっくり読めていないのですが、立ててからかなり時間が経ってしまいましたので、ご迷惑を避けるためとりあえず締め切らせていただきます。
VBAを実際に書いてくださった方、VBAなしで行った方がこの際良いのではないかという方、両方いらっしゃいましたが、とてもよくわかりました。参考にさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- その他(コンピューター・テクノロジー) エクセルの課題について 1 2022/07/25 14:39
- 物理学 大学物理に詳しい方に質問です。 ラザフォードたちが実験で知りたかったことは衝突パラメータbと原子核の 1 2023/03/16 03:39
- Java Javaの問題なのですが、 永久ループを使って以下に従って数値を出力するプログラムを作成する。 ・1 3 2023/06/06 18:43
- その他(ゲーム) ポケモン乱数 色違い 伝説 HGSS(ハートゴールド・ソウルシルバー) 1 2022/05/06 13:13
- 数学 仕事で使う算数の計算が難しいです 2 2023/02/01 22:26
- 統計学 Excelによるサンプルの拡大について 6 2023/08/22 16:03
- 自律神経失調症 去年の秋ぐらいから、 風邪と思うようなダルさを感じて、コロナの検査→陰性。 風呂あがりに、すぐのぼせ 1 2023/02/25 20:04
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- 婦人科の病気・生理 詳しい方教えてください。 ・動悸(脈が速くないが、ドクンドクンと音が大きく感じる) ・おへそあたりや 1 2022/10/18 00:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
Cellsのかっこの中はどっちが行...
-
エクセルVBAにて =A1=B1とすれ...
-
VBマクロ 色の付いたセルを...
-
エクセルVBA intersect colu...
-
Worksheets メソッドは失敗しま...
-
文字列の結合を空白行まで実行
-
エクセルVBA シートモジュール...
-
【補足欄が足りなかったため、...
-
VBA 値と一致した行の一部の列...
-
vba 2つの条件が一致したら...
-
マクロ 関数を使った抽出でエラ...
-
【VBA】2つのシートの値を比較...
-
C# dataGridViewの値だけクリア
-
エクセル VBA ユーザーフォー...
-
別シートから年齢別の件数をカ...
-
グリッドの列の最大値を求めたい。
-
VBAで条件から範囲を指定して色...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報