Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


43165 / 76735 ←次へ | 前へ→

【38624】Re:料金計算マクロ 訂正
発言  ichinose  - 06/6/7(水) 16:02 -

引用なし
パスワード
   ▼roxy さん:
>誤差の件はシリアル値で取るとやはり出るので、全て分単位で時間を取ってきて計算しているみたいです。
>確かに誤差が出たときに微妙にずれが生じますね。

提示してコードで誤差がでたのですか?
だとしたら、誤差が発生した時刻情報(開始時刻と終了時刻)を教えてください。

私の環境では誤差が出てこないのですが、

'===========================================
Sub main()
  Const Lim_cost = 1500
  Dim idx As Long, jdx As Long
  Dim t_m As Long
  Dim n_m() As Variant
  Dim st As Date, ed As Date
  Dim std As Date
  Dim l_rng As Range
  On Error Resume Next
  Set l_rng = Range("d1:d3")
  t_m = 0
  st = Range("a1").Value
  ed = Range("b1").Value
  std = Int(st)
  If st > ed Then ed = ed + 1
  Do While st < ed
    idx = Application.Match(st - Int(st), l_rng, 1)
    If l_rng.Cells(idx, 4).Value = -1 Then
     t_m = t_m + l_rng.Cells(idx, 2).Value
    Else
     jdx = Int(st) - std + l_rng.Cells(idx, 4).Value
     Err.Clear
     n_m(jdx) = n_m(jdx) + l_rng.Cells(idx, 2).Value
     If Err.Number <> 0 Then
       ReDim Preserve n_m(jdx)
       n_m(jdx) = 0
       n_m(jdx) = n_m(jdx) + l_rng.Cells(idx, 2).Value
       End If
     End If
    st = st + l_rng.Cells(idx, 3).Value
    st = CDate(Format(st, "yyyy/m/d hh:mm"))
    Loop
  For idx = LBound(n_m()) To UBound(n_m())
   t_m = t_m + IIf(n_m(idx) > Lim_cost, Lim_cost, n_m(idx))
   Next
  MsgBox t_m
End Sub

mainを上記と差し替えて見てください。


>1日をまたがった計算もありうるし、曜日によって料金が変わったりするからです。


曜日による料金は、料金表にその料金の追加で計算は可能です。

また、元々日をまたがった計算も可能にしてあります。

例。
セルA1に

2006/6/7 16:00:00

セルB1に

2006/6/9 16:00:00

と指定し、mainを実行すると36600という料金が表示されます。
確認してみてください。

それから、ハトさんのコードも拝見しました。

私とハトさんでは、計算の仕様が違っています。

夜には最大上限金額の計算方法です。
20:00以降6:00までの間で
\1500を超えても\1500以上に料金がなることはありません

私は、

20:00から、翌日の6:00までの料金を1500を超えないようにしてあります。
つまり、
開始を0:00 終了を23:00とした場合は、
0:00〜6:00-----200*6=1200
6:00〜20:00----14*3*400=16800
20:00〜23:00---3*2*300=1800--->1500(上限金額設定)

で1200+16800+1500=19500という料金にしていますが。

ハトさんは、

16800+1500=18300にしています。


これが、本来はどちらが仕様ですか?


私も迷いましたが、経営者側が儲かる仕様
(料金というのだから経営している事象だと思って・・)
にしました。

この辺もはっきりしてください。

0 hits

【38516】料金計算マクロ mai 06/6/5(月) 16:16 質問
【38524】Re:料金計算マクロ ハト 06/6/5(月) 18:11 回答
【38526】Re:料金計算マクロ ハト 06/6/5(月) 18:34 発言
【38579】Re:料金計算マクロ sin 06/6/6(火) 16:13 発言
【38606】Re:料金計算マクロ ハト 06/6/7(水) 10:31 発言
【38618】Re:料金計算マクロ ハト 06/6/7(水) 13:52 発言
【38623】Re:料金計算マクロ sin 06/6/7(水) 15:53 発言
【38629】Re:料金計算マクロ ハト 06/6/7(水) 16:29 発言
【38537】Re:料金計算マクロ ハト 06/6/6(火) 10:32 回答
【38602】Re:料金計算マクロ roxy 06/6/7(水) 9:29 お礼
【38608】Re:料金計算マクロ roxy 06/6/7(水) 10:40 質問
【38612】Re:料金計算マクロ ハト 06/6/7(水) 11:06 発言
【38532】Re:料金計算マクロ ichinose 06/6/6(火) 8:57 発言
【38533】Re:料金計算マクロ 訂正 ichinose 06/6/6(火) 9:10 発言
【38601】Re:料金計算マクロ 訂正 roxy 06/6/7(水) 9:27 お礼
【38624】Re:料金計算マクロ 訂正 ichinose 06/6/7(水) 16:02 発言
【38627】Re:料金計算マクロ 訂正 ハト 06/6/7(水) 16:23 発言
【38645】Re:料金計算マクロ 訂正 roxy 06/6/7(水) 17:58 発言
【38690】Re:料金計算マクロ 訂正 sin 06/6/8(木) 15:54 発言

43165 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free