駐車場の料金算出 ~改造~

ユーザー定義関数

前回[ 駐車場の料金算出 ~ユーザー定義関数~


前回はユーザー定義関数を作って駐車料金の算出を行いました。

で、依頼者から「分の計算は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(入庫時間,出庫時間)

です。

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  • ▼お小遣い稼ぎしませんか?▼ 日々の生活にhappyをプラスする|ハピタス

    クレジットカード・FX口座を作るだけで簡単に3万円GETです。一切支出はありません。

印刷 置換 セル選択 COUNTIF VLOOKUP HLOOKUP グラフ COLUMN SUMIF XLSTART 検索 TODAY 作業効率UP 図形 日付 目標 ワイルドカード テンプレート ユーザー定義関数 変換 無料 STDEV フロー図 バーコード 条件付き書式 SUM コピペ NA() 偏差値 DATE
  • 関西在住の30代サラリーマン。事務職で毎日Excelと戯れています。
    システム導入なんて資金が無い!Excelでなんとかやりたい零細中小の社長さん・事務員さんの力になればと思います。
    詳しいプロフィール


PAGE TOP ↑