Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


63531 / 76732 ←次へ | 前へ→

【17796】Re:分数の表示は?
回答  ichinose  - 04/9/7(火) 23:55 -

引用なし
パスワード
   ▼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プロシジャーを変更すれば、
計算式の開始位置や計算式の作成数の増減も可能です。

まずは、確認してみて下さい。
0 hits

【17788】分数の表示は? ponpon 04/9/7(火) 18:34 質問
【17796】Re:分数の表示は? ichinose 04/9/7(火) 23:55 回答
【17798】Re:分数の表示は? 訂正 ichinose 04/9/8(水) 0:23 発言
【17844】Re:分数の表示は? ponpon 04/9/8(水) 18:35 お礼
【17852】Re:分数の表示は? ichinose 04/9/8(水) 19:36 発言
【17854】Re:分数の表示は? 訂正の訂正 ichinose 04/9/8(水) 20:04 発言
【17855】Re:分数の表示は? ponpon 04/9/8(水) 20:26 発言
【17797】Re:分数の表示は? ちゃっぴ 04/9/7(火) 23:58 回答
【17845】Re:分数の表示は? ponpon 04/9/8(水) 18:52 お礼
【17799】Re:分数の表示は? ponpon 04/9/8(水) 0:31 発言

63531 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free