| 
    
     |  | ▼ichinose さん: >▼ponpon さん:
 >こんばんは。
 >台風、私の地方はほとんど被害がなかったのですが、
 >ponpon さんの方では大丈夫でしたか?
 
 こちらは北九州に近いですから、瓦が飛んだり木が倒れたりとひどかったです。私の学校も窓ガラスが割れ、水浸しの教室ができました。
 下記の内容は、学校から帰ってからずっと眺めています。text関数(いろいろと過去ログをみると使い道のある便利な関数のようですが)使ったことありません。ただ数字をテキストとして処理するぐらいしか知りません。
 もう少し勉強して、使えるようになりたいと思います。ichinose さんぐらいVBAの力があれば子どもにいろんなことをしてあげれるのになと思います。
 この間自動100マス計算を作って子どもにさせたら喜んでしていました。ファイルをコピーして家庭に持って帰らせました。子どもはパソコン好きですから
 話がそれましたが、これからもいろいろ未熟ながら挑戦したいと思いますのでよろしくお願いします。
 
 >ワークシート関数の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
 >
 >こんなんでどうでしょうか?
 >私もこれ、子供に使おう!!
 
 子どもに使うなら足し算引き算のところは、分母を20以内にしないと通分が地獄のようになると思いますよ。(蛇足でしたか?・・・・)
 
 |  |