|
一箇所訂正して下さい。
>▼ponpon さん:
>こんばんは。
>
>> 最近ときどきお世話になってます。初心者です。台風も無事通り過ぎましたので・・・
>> 分数で検索しましたがヒットしませんでしたので、質問させてください。
>> 乱数(関数)を使って子ども用に下のような問題を作っています。
>> しかし、約分ができる分数ができてしまいます。今は、if関数を使いこの分母の時は
>>分子はいくらと決めて表示をしています。したがって同じような分数がたくさんできてしまいます。
>> そこで、VBAを使ってできないものかと考えていますがうまくいきません。
>> loopを使ってやればできそうなのですが、・・・
>> ちなみに分母は 30までで 仮分数はだめです。子ども向けなので2/5のような表示もだめです。よろしくお願いします。
>>
>> A B C D E F
>>1 1 3
>>2 - × - =
>>3 3 4
>>4
>>5 3 2
>>6 - + - =
>>7 7 5
>>8
>新規ブックに以下のコードをコピーして実行してみて下さい。
>'===============================================================
>Sub main()
> 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
> Call set_計算式(Cells(idx, 1), Mol(), Deno(), _
> Choose(Int(Rnd * 4) + 1, "+", "−", "×", "÷")) '計算式の表示
> Next
>End Sub
>'===============================================================
>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
>'===============================================================
>Sub set_計算式(rng As Range, 分子() As Long, 分母() As Long, 演算子 As String)
>'指定されたセル位置を開始位置としてふたつの分数計算式を表示する
>'input : rng---表示開始セル
>' 分子()----ふたつの分数値の分子を格納した配列(引数は、0から始まる)
>' 分母()----ふたつの分数値の分母を格納した配列(引数は、0から始まる)
>' 演算子----演算子文字列を格納
> For idx = 0 To 1
> With rng.Offset(0, idx * 2)
> With .Borders(xlEdgeBottom)
> .LineStyle = xlContinuous
> .Weight = xlThin
> .ColorIndex = xlAutomatic
> End With
> .Value = 分子(idx)
> .HorizontalAlignment = xlCenter
> .VerticalAlignment = xlBottom
> End With
> With rng.Offset(1, idx * 2)
> .HorizontalAlignment = xlCenter
> .VerticalAlignment = xlTop
> .Value = 分母(idx)
> End With
> Next idx
> With rng.Offset(0, 1).Resize(2, 1)
> .HorizontalAlignment = xlCenter
> .VerticalAlignment = xlCenter
> .MergeCells = True
> .Value = 演算子
> End With
> With rng.Offset(0, 3).Resize(2, 1)
> .HorizontalAlignment = xlCenter
> .VerticalAlignment = xlCenter
> .MergeCells = True
> .Value = "="
> End With
>End Sub
>
>プロシジャーmainを実行してみて下さい。
>アクティブシートのセルA1から計算式を10行表示するはずです。
>
>列幅や行の幅は、適当に調節して下さい。
>又、mainプロシジャーを変更すれば、
>計算式の開始位置や計算式の作成数の増減も可能です。
>
>まずは、確認してみて下さい。
|
|