こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

マクロ ユーザー定義関数

電気使用量に応じて電力量料金を返す関数はどう作ったらいいのでしょうか?

条件は
最初の120kwhまで15円58銭/kwh

120kwh超えて300kwhまで20円67銭/kwh

上記超過は22円43銭/kwh

繰り返しを含むVBAをつかうのですか?

投稿日時 - 2013-06-25 14:33:11

QNo.8149190

すぐに回答ほしいです

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

いや、単純に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

要は条件を分けて、違う料金部分の部分を手計算して足すって
だけの話ではないかと。

投稿日時 - 2013-06-25 15:23:36

お礼

詳しくありがとうございます。

KWとAS doubleはどういう役割なのですか?

正直、そう言った内容の説明も無く出された課題なのでマクロについてほとんど理解出来てません。

投稿日時 - 2013-06-25 16:21:43

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.5

>KWとAS doubleはどういう役割なのですか?

いや別に、As Longでもいいですけどね。Doubleにしたのは
単純に私の好みです。なぜ必要かあたりは、課題なら、
ご自身でどうぞ。とりあえず、この辺から読むといいかと。
http://tarohome.web.fc2.com/
http://kabu-macro.com/

要は変数の種類の定義って話です。

投稿日時 - 2013-06-25 16:41:15

お礼

わかりました。

詳しく読んでみます。

丁寧な回答ありがとうございました。

投稿日時 - 2013-06-25 16:52:09

ANo.4

繰り返し処理を使わなくても出来そうですよ。

> 最初の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でのループを使うと却って面倒なことになりそうです。



お勉強なら、頑張って下さい。
実務なら・・料金改定等で単価が変わったときのメンテナンスの事を考えると、
ユーザー定義関数に組み込んでしまうのも却って面倒なのかもしれないです。
その辺りもご思案下さいませ。

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2013-06-25 15:45:38

お礼

詳しく説明ありがとうございます。

理論は理解出来るのですが、それらを形にする術(ルールやas,ElseIF見たいなキーワード)をまともに教えて戴いて無いので、組み方すら分かりません。
酷い課題ですよ。

投稿日時 - 2013-06-25 16:30:22

ANo.3

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

投稿日時 - 2013-06-25 15:24:01

お礼

詳しいご回答ありがとうございました。

投稿日時 - 2013-06-25 23:36:47

あなたにオススメの質問