Excel VBA質問箱 IV

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

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


4965 / 13645 ツリー ←次へ | 前へ→

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

【53342】プログラムについて・・・
回答  k  - 08/1/4(金) 14:05 -

引用なし
パスワード
   Basicをつかって、2つの分数の足し算(必ず最小公倍数で通分すること)をするプログラムを作りたいんですがどうしたらいいですか?INPUT命令はなにをいれればいいんですか?
実行例)
分子 ?31
分母 ?56
分子 ?21
分母 ?88
でお願いします。

【53344】Re:プログラムについて・・・
発言  neptune  - 08/1/4(金) 14:49 -

引用なし
パスワード
   ▼k さん:
>Basicをつかって、2つの分数の足し算(必ず最小公倍数で通分すること)をするプログラムを作りたいんですがどうしたらいいですか?INPUT命令はなにをいれればいいんですか?
>実行例)
>分子 ?31
>分母 ?56
>分子 ?21
>分母 ?88
>でお願いします。
Basicは殆どやってないので、正直完全に忘れましたが、
QBだと分子をA1,A2分母をB1,B2とすると
INPUT "分子1";A1
INPUT "分母1";B1
ってな感じで、入力して
(A1*A2)/(B1*B2)
ってな感じだと思うんですけど???
多分、同じようなもんと思いますが。

ところで、ここはVBAの掲示板ですから、BASICの板(あるならですが)を
探しすか、プログラム全般関係の掲示板で質問しなければ、良いアドバイス
はもらえませんよ。
但し、プログラム全般関係の板では現在のような質問の仕方ではなく
何が解らないかを明確にしないとまともに相手にしてもらえません。

【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の時のエラー処理はしていないので、
うまく作動するようなら、それを追加してみてください。

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