駐車場の料金算出 ~改造~
|
|
ユーザー定義関数 |
前回[ 駐車場の料金算出 ~ユーザー定義関数~ ]
前回はユーザー定義関数を作って駐車料金の算出を行いました。
で、依頼者から「分の計算は30分ごとに切り上げて欲しい」との依頼を受けました。
前の定義関数では分の切り捨てと、1分単位での料金算出が出来るように実現していました。
では30分ごとに切り上げに改造~!
考え方
まずこの依頼を受けた時にふと思ったのが、昼時間と夜時間の区別。
例えば19:50~20:10の間駐車した場合、昼料金の時に駐車したのが10分で、夜料金の時に駐車したのが10分・・・
こういう場合にどうするのか?
これはもう、駐車場管理側の定義の問題です。この辺の定義を聞いておかないと計算も出来ないので。
で、結局 昼も夜も別々に切り上げる。との返答を頂きました。
この例のパターンだと昼30分夜30分とするそうです。
コード
Function Tyuusya(入庫時間, 出庫時間) '-----------------設定----------------------------------- 昼時間 = TimeSerial(6, 0, 0) '昼時間の設定( 6:00~) 夜時間 = TimeSerial(20, 0, 0) '夜時間の設定(20:00~) 昼料金 = 400 '昼料金の設定(円/時間) 夜料金 = 70 '夜料金の設定(円/時間) 一日料金 = 6300 '一日料金の設定 '-----------------メイン--------------------------------- 入時間 = TimeSerial(Hour(入庫時間), Minute(入庫時間), Second(入庫時間)) 出時間 = TimeSerial(Hour(出庫時間), Minute(出庫時間), Second(出庫時間)) 駐車時間 = 出庫時間 - 入庫時間 駐車日数 = Day(駐車時間 + 1) If 駐車日数 = 31 Then 駐車日数 = 0 End If If 入時間 >= 昼時間 And 入時間 <= 夜時間 Then If 出時間 >= 昼時間 And 出時間 <= 夜時間 Then If 入時間 <= 出時間 Then 昼駐車時間 = 出時間 - 入時間 Else 昼駐車時間 = 夜時間 - 入時間 昼駐車時間 = 昼駐車時間 + 出時間 - 昼時間 夜駐車時間 = 駐車時間 - 昼駐車時間 End If Else 昼駐車時間 = 夜時間 - 入時間 夜駐車時間 = 駐車時間 - 昼駐車時間 - 駐車日数 x = 夜駐車時間 End If Else If 出時間 >= 昼時間 And 出時間 <= 夜時間 Then 昼駐車時間 = 出時間 - 昼時間 夜駐車時間 = 駐車時間 - 昼駐車時間 - 駐車日数 Else If 入時間 < 昼時間 Then If 入時間 <= 出時間 Then If 出時間 > 夜時間 Then 夜駐車時間 = 昼時間 - 入時間 + 出時間 - 夜時間 昼駐車時間 = 駐車時間 - 夜駐車時間 - 駐車日数 Else 夜駐車時間 = 出時間 - 入時間 End If Else 昼駐車時間 = 夜時間 - 昼時間 夜駐車時間 = 駐車時間 - 昼駐車時間 - 駐車日数 End If Else If 入時間 <= 出時間 Then 夜駐車時間 = 出時間 - 入時間 昼駐車時間 = 駐車時間 - 夜駐車時間 - 駐車日数 Else If 出時間 < 夜時間 Then 夜駐車時間 = 出時間 + TimeSerial(24, 0, 0) - 入時間 Else 昼駐車時間 = 夜時間 - 昼時間 夜駐車時間 = 駐車時間 - 昼駐車時間 - 駐車日数 End If End If End If End If End If 料金 = 昼料金 * Hour(昼駐車時間) 料金 = 料金 + 夜料金 * Hour(夜駐車時間) 料金 = 料金 + 一日料金 * 駐車日数 If Minute(昼駐車時間) <> 0 Then If Minute(昼駐車時間) <= 30 Then 料金 = 料金 + 昼料金 / 2 Else 料金 = 料金 + 昼料金 End If End If If Minute(夜駐車時間) <> 0 Then If Minute(夜駐車時間) <= 30 And Minute(昼駐車時間) <> 0 Then 料金 = 料金 + 夜料金 / 2 Else 料金 = 料金 + 夜料金 End If End If Tyuusya = 料金 End Function |
これが完成型です。
変更点は黄色文字を追加しました。
意味は、駐車時間が30分より多いか否か。30分より上であれば1時間分の駐車料金、30分以下であれば1時間÷2の駐車料金を計算させています。
あと、分の切り捨てや、分刻みでの計算を廃止しましたので、エクセルで関数を使う時の引数を減らしました。
エクセルのセルに入力する関数は
=Tyuusya(入庫時間,出庫時間)
です。
関連記事
- 前の記事
- 駐車場の料金算出 ~ユーザー定義関数~
- 次の記事
- 表にある電話番号をクリックして電話を掛ける