| 
    
     |  | ▼ponpon さん: こんばんは。
 台風、私の地方はほとんど被害がなかったのですが、
 ponpon さんの方では大丈夫でしたか?
 
 > ヘルプなどをつかってコードを眺めてみましたが、
 > 「Split関数」の使い方というか配列の考え方やtext関数の使い方や引数付きのプロシ ージャについてもよくわかりません。もう少し勉強したいと思います。
 >  下のコードが分子分母を決定するところだと思いますが、よく理解できません。
 >  時間がかかると思いますが、もう少し勉強します。また、小学生ですから、マイナス はだめなので、引き算の場合は、もう一工夫が必要みたいです。
 > 忙しい中回答していただきありがとうございました。
 > 提示していただいたコードを元に研究したいと思います。
 >
 ワークシート関数のText関数を使用して乱数値を
 分数文字列に書き換えています(これ使うと約分のことを考えなくて良いから)。
 その後、Split関数で"/"を区切り文字として分子と分母を配列に格納しています。
 
 >>Sub get_Fract(分子 As Long, 分母 As Long, 分母lim As Long)
 >>'乱数値から、分数の分子・分母を作成する
 >>'input : 分母lim---分母のリミット値(この値以下の分母を返す)
 >>'output: 分子、分母
 >>  Dim r As Double
 >>  Do
 >>   r = Rnd
 >>   If r > 0 Then
 >>    wk = Split(WorksheetFunction.Text(r, "??/??"), "/")
 If Val(wk(0)) > 0 And Val(wk(0)) < Val(wk(1)) And Val(wk(1)) <= 分母lim Then
 '↑ここは、こっちのコードにして下さい
 >>      分子 = wk(0)
 >>      分母 = wk(1)
 >>      Exit Do
 >>      End If
 >>    End If
 >>   Loop
 >>  Erase wk
 >>End Sub
 
 引き算の件は、私も投稿後に気づきました。
 よって、Mainプロシジャーだけちょっと変更します。
 '==============================================================
 Sub main()
 Dim 演算子 As String
 Dim Mol(0 To 1) As Long, Deno(0 To 1) As Long
 Randomize Timer
 For idx = 1 To 30 Step 3
 For jdx = 0 To 1
 Call get_Fract(Mol(jdx), Deno(jdx), 30) '分数の分子・分母の取得
 Next jdx
 演算子 = Choose(Int(Rnd * 3) + 1, "+", "−", "×", "÷")
 '                ↑ここ、4でなく、3
 If 演算子 = "−" Then '演算子が−だったら?
 If Mol(0) / Deno(0) - Mol(1) / Deno(1) < 0 Then '答えが-だったら?
 wk = Mol(0)
 Mol(0) = Mol(1)
 Mol(1) = wk
 wk = Deno(0)
 Deno(0) = Deno(1)
 Deno(1) = wk
 '     ↑データを入れ替える
 End If
 End If
 Call set_計算式(Cells(idx, 1), Mol(), Deno(), 演算子) '計算式の表示
 Next
 End Sub
 
 こんなんでどうでしょうか?
 私もこれ、子供に使おう!!
 
 
 |  |