• ベストアンサー

VBの条件判断の応用問題

大学の情報の問題で難しくてできなくて困っています。 できる方がいれば回答をお願いします。 東京都水道局では23区内の水道料金(月額)を水道管の口径(以下で呼び径と記述)と月の水道使用料により、次の表に基づいて計算する。水道管の呼び径の番号と水道使用量を性数値で入力すると、次表と計算式に従い、次のページの仕様を満たす水道料金計算のプログラムを作れ。 申し訳ないのですが 表をのせられなかったのでこちらから参照してください 東京都水道局のホームぺージです http://www.waterworks.metro.tokyo.jp/life/r_keisan.htm 水道料金一か月の表の一般用の部分です 計算式 (基本料金+従量料金)*1.05(1円未満の端数は切り捨て) 計算例:呼び径20ミリで1か月24使用した場合の料金 (基本料金1170円+従量料金2042円)*1.05=3372円   ≪従量料金内訳≫ 1~5 → 0円/*5= 0円 6~10 → 22円/*5= 110円 11~20 → 128円/*10 = 1280円 21~24 → 163円/*4 = 652円                  小計 2042円 【プログラムの仕様】 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です

質問者が選んだベストアンサー

  • ベストアンサー
  • benelli
  • ベストアンサー率51% (78/152)
回答No.5

プログラムが得意な人たちや自分としては大変簡単に感じる問題ですが、分からないものは分からない、という気持ちもわからなくはないですが…… このサイトでの答えだけの書きこみはご法度なので以下はヒントです。半分答えですが。。。 仕様1.分かると言うことで省略 仕様2.SelectCase構文を使う、という時点で答えはひとつしかないですね。 Select Case 判断する変数 Case 判断値その1 判断する変数の値が判断値その1だったら行う命令 Case 判断値その2 判断する変数の値が判断値その2だったら行う命令 Case 判断値その3 判断する変数の値が判断値その3だったら行う命令 …… Case Else 判断する変数の値がどれにも該当しなかったら行う命令 End Select 判断する変数、判断値、判断する変数の値が判断値だったら行う命令、この三つの内容が分かればSelectCase構文を用いたコードの完成です。そして問題文から、仕様1で取得した番号、呼び径番号の種類、呼び径番号による基本料金を決定すること、が決まっています。なので、呼び径番号が1だったら、呼び径番号番号が2だったら……という感じに数珠繋ぎに考えればOKです。 仕様3.これはSelectCase構文にするかIf文にするかで書く答えそのものが変わりますが、それぞれ考え方及びその扱いは変わりませんので自分に簡単なほう(慣れているほう、よく分かるほう)を選びましょう。 「各区分の料金表の単価を使用量の各増分に適用して、増分毎の料金を求めて積算する」 こういっているので、1~5立方mの単価での料金、6~10立方mの単価での料金、11~20立方mの単価での料金……を順次計算してそれぞれを加算していくプログラムを作らなくてはいけません。 簡単な方法としては、まずは仕様2と同じようにSelectCase構文を作り、呼び径番号毎に命令を区分けします。その命令の中に、複数のIf文を用いてうまく単価の料金を計算するようにしましょう。調べて答えを探すのではなく、パズルを解くように頭をひねってIf文の応用を考えてください。 もし使用量が1以上5未満だったら1~5立方mの単価での料金は……もし使用量が5以上だったら1~5立方mの単価での料金は……もし使用量が6未満だったら6~10立方mの単価での料金は……もし使用量が6以上10未満だったら6~10立方mの単価での料金は……もし使用量が10以上だったら6~10立方mの単価での料金は…… このときはこうする、そのときはこうする、あのときはこうする、どれでもなかったらこうする……こんな感じにひとつひとつIf文を書いていくのが現時点ではベストだと思います。そりゃもっといい方法がたくさんあるんですけどね、今は気にせずにIf文連打。問題がIf文使えと書いているのですから。 仕様4.仕様2と仕様3で各料金が決定するのですから、あとは消費税を計算するだけです。 「Int関数の引数に計算式を書き入れ、その関数値を整数型変数に代入すればよい。」 ここまで言い切っているので答えはもう決まっているようなものです。基本なことですが、関数、引数、変数の書く意味を調べて理解できれば仕様4の問題は簡単です。”整数型変数”ということなのでちゃんと整数型であることを宣言することを忘れないこと。 ひたすら調べて答えを求めるのではなく、パーツを組み合わせてうまく動くものを作ると言う気持ちで取り組んでみてください。

40one
質問者

お礼

気持ちを察していただきありがとうございます。 ほんとに初心者なんでできないんです。 丁寧な回答をしていただいてありがとうございます。 ヒントを元にやってみますのでまたわからないところがでてきたら また回答してもらえるとありがたいです。

40one
質問者

補足

回答をみて気がついたのですが Sub ex51() '問題5 Dim x As Integer, y 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("今月の水道使用量を立法メートル単位で入力してください。") 一番をこんな感じにしたのですが間違えてますよね。 yはあっているとおもうのですがxがまちがえています どういう風にすればいいのでしょうか? 回答おねがいします

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.6

この質問の対処法は、こまめな、場合分けに尽きるのです。 Select caseの問題であるのですが、 (1)これはいわばルール記述法ですが 今はあれこれ考えられないでしょうが、この騒ぎが収まった後、興味があれば、エクセルの場合、 (2)表引き法を考えると勉強になりますよ。 (A)料金表をエクセルシートの表に作る。 (B)口径でVLOOKUP(またはMATCH)関数を使い該当行を得る。ー>基本料金を知る。 (C)使用量でHLOOKUP(またはMATCH)関数を使い該当列を得る。ー>1立米あたりの料金を得る。 後は使用量x単価の掛け算、税計算の問題と基本料金の足し算です。 (注意)ただし一般用と公衆浴場分は別表に作る。 後の表検索利用の便宜上、2列以上にまたがって同じ単価の区画も上の使用量の区分に従って、同じ値を埋めておくこと。 ーー VLOOKUP・MATCH関数ははVBAでも使えます。 WEBにVLOOKUP・MATCH関数の解説はあふれています。 「VBA VLOOKUP、VBA MMATCH」でも記事が沢山出ます。 ーーー この方法の良いところは、公衆+一般やその他の大きな体系が変更無い限り、修正があっても、テストが簡単で済みます。 コードが非常にすっきりする。数行で済みます。

40one
質問者

補足

ちゃんと問題通りにできたらためしてみます。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

1) で呼び径番号を取得しているのですから 2) の部分は Select case 呼び径番号 case 1 ' 13mm 基本料金 = 860 case 2 ' 20mm 基本料金 = 1170 case 3 ' 25mm 基本料金 = 1460 case 4 ' 30mm 基本料金 = 3450 ... end select となることが理解できますか? これが分からないとなると もっと基本的な部分からやり直しですが

40one
質問者

補足

理解できます。やってみます

  • morigann
  • ベストアンサー率17% (57/329)
回答No.3

2が分からないという事は、出題文以前に問題があるように思われます。 Select~Case文はどういった構文か理解されてますでしょうか? ご質問者様が分かっている範囲で補足お願い致します。 もし分からない場合は、書店にてVBの書籍がたくさんありますのでご購入されてはいかがでしょうか? 問題文の1が分かるという事はVBの使い方は分かっておられるようですので、構文ごとに調べる事が出来て使用例が載っているのが良いと思います。

40one
質問者

補足

頭がかたいんで基本がわかっても応用できないのです。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

1,2は簡単に出来ると思いますが・・・。 3の部分はじっくりと考えるしか無いでしょうね。 3が出来れば4は簡単。 説明文には基本的な方法が書かれているので、難しく考え過ぎない事です。

40one
質問者

補足

1はできたのですが2の入力方法がわからなく、そのさきはつまってしまっています。教科書にも詳しく書いていないのでやり方などを教えていただけるとありがたいです。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>という初心者に対して大変難しいもんだいです。 見た所、初心者のために一から十まで事細かに指示された非常に優しい問題とお見受けします。 丸投げは削除されるので、40one さんがわからない部分を補足するといいよ。

40one
質問者

補足

はやくすすめられてわからないままで教科書をみて 考えているのですが何回やってもうまくいきません。 1番はできたので2番以降の補足をしてもらえると ありがたいです

関連するQ&A