|
▼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 wk(0) > 0 And wk(0) < wk(1) And 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プロシジャーを変更すれば、
計算式の開始位置や計算式の作成数の増減も可能です。
まずは、確認してみて下さい。
|
|