|
▼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
こんなんでどうでしょうか?
私もこれ、子供に使おう!!
|
|