- ベストアンサー
VBの問題です
VBの条件判断の応用問題 大学の情報の問題でヒントをもらいやってみたのですがうまくできません。自分でやったものをのせたのでどこがどのように間違えているか指摘してもらえるとありがたいです。 東京都水道局では23区内の水道料金(月額)を水道管の口径(以下で呼び径と記述)と月の水道使用料により、次の表に基づいて計算する。水道管の呼び径の番号と水道使用量を性数値で入力すると、次表と計算式に従い、次のページの仕様を満たす水道料金計算のプログラムを作れ。 申し訳ないのですが 表をのせられなかったのでこちらから参照してください http://www.waterworks.metro.tokyo.jp/life/r_keisan.htm 水道料金一か月の表の一般用の部分です 計算式 (基本料金+従量料金)*1.05(1円未満の端数は切り捨て) 【プログラムの仕様】 1.呼び径は(1)13mm、(2)20mm、・・・(12)300mm以上の中から該当する番号を、水道使用量は㎥単位で整数値を、どちらもInputbox関数で取得する。呼び径番号取得ではInputboxに番号と呼び径の対応関係を表示せよ。この際、表示文字列を複数部分に分割して、行末を文字列連結演算子と継続指定「 & _ 」することにより複数行で記述する。 2.入力された水道管の呼び径を番号をもちいてSelectCase構文で基本料金を決定する。 3.従量料金のけいさんでは、まずどの呼び径の料金区分で計算するかをSelectCase構文またはIf文で決定して、各区分の料金表の単価を使用量の各増分に適用して、増分毎の料金を求めて積算する。例にも示した(2)の呼び径の場合は、使用量を複数の増分に分けて、1~5;、6~10、11~20、21~30、・・・、1001以上の各増分に異なる単価を適用する。 4.基本料金と従量料金の合計金額に消費税を加えたものが水道料金となる。この計算を行うと小数点以下の金額を切り捨てるため、Int関数の引数に計算式を書き入れ、その関数値を整数型変数に代入すればよい。 数字に単位が付いてませんがm^3です Sub ex51() '問題5 Dim x As Integer, y As Integer, z As Integer x = InputBox("呼び径を丸番号の数字で選択してください。 " & _ "(1) 13mm (2) 20mm (3) 25mm " & _ "(4) 30mm (5) 40mm (6) 50mm " & _ "(7) 75mm (8) 100mm (9) 150mm " & _ "(10) 200mm (11) 250mm (12) 300mm以上 ") y = InputBox("今月の水道使用量を立法メートル単位で入力してください。") Select Case x Case ((1)) '13mm 基本料金 = 860 Case ((2)) '20mm 基本料金 = 1170 Case ((3)) '25mm 基本料金 = 1460 Case ((4)) '30mm 基本料金 = 3435 Case ((5)) '40mm 基本料金 = 6865 Case ((6)) '50mm 基本料金 = 20720 Case ((7)) '75mm 基本料金 = 45623 Case ((8)) '100mm 基本料金 = 94568 Case ((9)) '150mm 基本料金 = 159094 Case ((10)) '200mm 基本料金 = 349434 Case ((11)) '250mm 基本料金 = 480135 Case ((12)) '300mm以上 基本料金 = 816145 End Select Select Case ((1)、(2)、(3)) If y = 1 < 5 Then z = 0 * y If y = 6 < 10 Then z = 22 * y If y = 11 < 20 Then z = 128 * y If y = 21 < 30 Then z = 163 * y If y = 31 < 50 Then z = 202 * y If y = 51 < 100 Then z = 213 * y If y = 101 < 200 Then z = 298 * y If y = 201 < 1000 Then z = 372 * y Else z = 404 * 1000 End If Select Case ((4)、(5)) If y = 1 < 100 Then z = 213 * y If y = 101 < 200 Then z = 298 * y If y = 201 < 1000 Then z = 372 * y Else z = 404 * y Select Case ((6)、(7)) If y = 1 < 1000 Then z = 372 * y Else z = 404 * y Select Case ((8)、(9)、(10)、(11)、(12)) z = 404 * y MsgBox ”水道料金=”int((x+z)*1.05) End Sub
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (6)
- hana-hana3
- ベストアンサー率31% (4940/15541)
- nnnnnon
- ベストアンサー率0% (0/1)
- hana-hana3
- ベストアンサー率31% (4940/15541)
- hana-hana3
- ベストアンサー率31% (4940/15541)
- hana-hana3
- ベストアンサー率31% (4940/15541)
- redfox63
- ベストアンサー率71% (1325/1856)
補足
Sub ex51() '問題5 Dim x As Integer, y As Integer, z As Integer, 基本料金 As String x = InputBox("呼び径を丸番号の数字で選択してください。 " & _ "(1) 13mm (2) 20mm (3) 25mm " & _ "(4) 30mm (5) 40mm (6) 50mm " & _ "(7) 75mm (8) 100mm (9) 150mm " & _ "(10) 200mm (11) 250mm (12) 300mm以上 ") y = InputBox("今月の水道使用量を立法メートル単位で入力してください。") Select Case x Case "(1)" '13mm 基本料金 = 860 Case "(2)" '20mm 基本料金 = 1170 Case "(3)" '25mm 基本料金 = 1460 Case "(4)" '30mm 基本料金 = 3435 Case "(5)" '40mm 基本料金 = 6865 Case "(6)" '50mm 基本料金 = 20720 Case "(7)" '75mm 基本料金 = 45623 Case "(8)" '100mm 基本料金 = 94568 Case "(9)" '150mm 基本料金 = 159094 Case "(10)" '200mm 基本料金 = 349434 Case "(11)" '250mm 基本料金 = 480135 Case "(12)" '300mm以上 基本料金 = 816145 End Select If x = "(1)" Or x = "(2)" Or x = "(3)" Then If y > 5 Then If y < 11 Then z = (y - 5) * 22 Else z = 5 * 22 If y < 21 Then z = z + ((y - 10) * 128) Else z = z + (10 * 128) If y < 31 Then z = z + ((y - 20) * 163) Else z = z + (20 * 163) If y < 51 Then z = z + ((y - 30) * 202) Else z = z + (30 * 202) If y < 101 Then z = z + ((y - 50) * 213) Else z = z + (50 * 213) If y < 201 Then z = z + ((y - 100) * 298) Else z = z + (100 * 298) If y < 1001 Then z = z + ((y - 200) * 372) Else z = z + (200 * 372) If y > 1001 Then z = z + ((y - 1000) * 404) Else z = z + (1000 * 404) End If End If End If End If End If End If End If End If End If End If If x = "(4)" Or x = "(5)" Then If y > 1 Then If y < 101 Then z = (y - 5) * 213 Else z = 5 * 213 If y < 201 Then z = z + ((y - 100) * 298) Else z = z + (100 * 298) If y < 1001 Then z = z + ((y - 200) * 372) Else z = z + (200 * 372) If y > 1001 Then z = z + ((y - 1000) * 404) Else z = z + (1000 * 404) End If End If End If End If End If End If If x = "(6)" Or x = "(7)" Then If y > 1 Then If y < 1001 Then z = (y - 5) * 372 Else z = 5 * 372 If y < 1001 Then z = z + (y - 1000) * 404 Else z = z + (1000 * 404) End If End If End If End If If x = "(8)" Or x = "(9)" Or x = "(10)" Or x = "(11)" Or x = "(12)" Then If y < 1 Then z = 5 * 404 Else z = 5 * 404 End If End If msgbox "水道料金=" int((基本料金+z)*1.05) End Sub こんな風にしたんですが最後のほうの計算があやしいんですが どんな感じで間違ってますかね? あと最初のXのINPUTBOXと最後の計算式がうまくできないんですが うまくできる方法ありますか? 回答よろしくおねがいします。 ちなみに最初の"(1)"のカッコは丸1がうまく表示できなくてこうなりました。