Excel VBA質問箱 IV

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

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


28684 / 76738 ←次へ | 前へ→

【53347】Re:プログラムについて・・・
発言  ichinose  - 08/1/4(金) 16:03 -

引用なし
パスワード
   ▼k さん:
こんにちは。

>Basicをつかって、2つの分数の足し算(必ず最小公倍数で通分すること)をするプログラムを作りたいんですがどうしたらいいですか?INPUT命令はなにをいれればいいんですか?
>実行例)
>分子 ?31
>分母 ?56
>分子 ?21
>分母 ?88
>でお願いします。
VBAでやるには? ということですか?
新規ブックの標準モジュールに

'========================================================
Option Explicit
Sub main()
  Dim ret As Long
  Dim ans(1 To 2) As Variant
  Dim mes As String
  Dim ques(1 To 4) As Variant
  Dim g0 As Long
  Dim GCD As Double
  Dim 答え As Variant
  For g0 = LBound(ques()) To UBound(ques())
    If g0 Mod 2 Then mes = "分子を指定して" Else mes = "分母を指定して"
    ques(g0) = Application.InputBox(mes, "分数の足し算", , , , , , 1)
    If TypeName(ques(g0)) = "Boolean" Then
     ret = 1
     Exit For
     End If
    Next
  If ret = 0 Then
    ans(1) = ques(1) * ques(4) + ques(2) * ques(3)
    ans(2) = ques(2) * ques(4)
    GCD = get_GCD(ans(1), ans(2))
    If ans(2) / GCD = 1 Then
     答え = ans(1) / GCD
    Else
     答え = ans(1) / GCD & "/" & ans(2) / GCD
     End If
    MsgBox ques(1) & "/" & ques(2) & "+" & ques(3) & "/" & ques(4) & " = " & 答え
    End If
End Sub
'==================================================================
Function get_GCD(ByVal n1 As Double, ByVal n2 As Double) As Long
  Dim val1 As Long
  Dim val2 As Long
  Dim amari As Long
  val1 = n1
  val2 = n2
  get_GCD = 1
  Do While val2 <> 0
   amari = val1 Mod val2
   If amari = 0 Then
    get_GCD = val2
    End If
   val1 = val2
   val2 = amari
   Loop
End Function

でmainを実行してみてください。
但し、分母が0の時のエラー処理はしていないので、
うまく作動するようなら、それを追加してみてください。

2 hits

【53342】プログラムについて・・・ k 08/1/4(金) 14:05 回答
【53344】Re:プログラムについて・・・ neptune 08/1/4(金) 14:49 発言
【53347】Re:プログラムについて・・・ ichinose 08/1/4(金) 16:03 発言

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