- ベストアンサー
マクロ ユーザー定義関数
電気使用量に応じて電力量料金を返す関数はどう作ったらいいのでしょうか? 条件は 最初の120kwhまで15円58銭/kwh 120kwh超えて300kwhまで20円67銭/kwh 上記超過は22円43銭/kwh 繰り返しを含むVBAをつかうのですか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
いや、単純にIF文だけで済むでしょ? Function DEN(KW As Double) As Double If KW > 300 Then DEN = 120 * 15.58 + 300 * 20.67 + (KW - 300) * 22.43 ElseIf KW > 120 Then DEN = 120 * 15.58 + (KW - 120) * 20.67 Else DEN = KW * 15.58 End If End Function 要は条件を分けて、違う料金部分の部分を手計算して足すって だけの話ではないかと。
その他の回答 (3)
- FEX2053
- ベストアンサー率37% (7991/21371)
>KWとAS doubleはどういう役割なのですか? いや別に、As Longでもいいですけどね。Doubleにしたのは 単純に私の好みです。なぜ必要かあたりは、課題なら、 ご自身でどうぞ。とりあえず、この辺から読むといいかと。 http://tarohome.web.fc2.com/ http://kabu-macro.com/ 要は変数の種類の定義って話です。
お礼
わかりました。 詳しく読んでみます。 丁寧な回答ありがとうございました。
- tsubuyuki
- ベストアンサー率45% (699/1545)
繰り返し処理を使わなくても出来そうですよ。 > 最初の120kwhまで15円58銭/kwh・・・1段階 > 120kwh超えて300kwhまで20円67銭/kwh・・・2段階 > 上記超過は22円43銭/kwh・・・3段階 なのですから、それぞれの段階が適用される電力量を計算して、 最終的に合計してやれば良さそうです。 > あくまで自分で作成しなければならない ようですので、サンプルコード等を提示するのはやめておきますが、 (出しちゃう人もいますけどね。) あまり難しく考えないようにすると良いですよ。 ワークシート関数だけでも出来る処理ではありますので、 まずは「考え方」をまとめてみてはいかがでしょう? 参考までに、添付図は 「難しい関数を使わなくても出来るかもしれない例」です。 A2セルに使用電力量を打つと、それぞれ計算します。 実際の計算式は F2セル:=IF(D2>A2,0,A2-D2) F3セル:=IF(A2<D3,0,A2-F2-D3) F4セル:=IF(A2<D3,A2,A2-F2-F3) G2~G4セル:=INT(E2*F2) こんな感じでIF関数とINT関数しか使っていません。 これをVBAを使ってまとめてやればユーザー定義関数の出来上がりです。 Selectでも良いでしょうし、Ifを重ねて力業でも十分いけます。 DoやForでのループを使うと却って面倒なことになりそうです。 お勉強なら、頑張って下さい。 実務なら・・料金改定等で単価が変わったときのメンテナンスの事を考えると、 ユーザー定義関数に組み込んでしまうのも却って面倒なのかもしれないです。 その辺りもご思案下さいませ。
お礼
詳しく説明ありがとうございます。 理論は理解出来るのですが、それらを形にする術(ルールやas,ElseIF見たいなキーワード)をまともに教えて戴いて無いので、組み方すら分かりません。 酷い課題ですよ。
- mt2008
- ベストアンサー率52% (885/1701)
Select Case で良いんじゃないでしょうか。 Function fDenki(nKWH) As Double Select Case nKWH Case Is > 300 fDenki = 120 * 15.58 + (300 - 120) * 20.67 + (nKWH - 300) * 22.43 Case Is > 120 fDenki = 120 * 15.58 + (nKWH - 120) * 20.67 Case Else fDenki = nKWH * 15.58 End Select End Function
お礼
詳しいご回答ありがとうございました。
お礼
詳しくありがとうございます。 KWとAS doubleはどういう役割なのですか? 正直、そう言った内容の説明も無く出された課題なのでマクロについてほとんど理解出来てません。