Excel VBA質問箱 IV

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

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


43099 / 76732 ←次へ | 前へ→

【38690】Re:料金計算マクロ 訂正
発言  sin  - 06/6/8(木) 15:54 -

引用なし
パスワード
   ▼roxy さん:
こんにちは

もしまだご覧でしたら、
私も”誤差”含んでいるのが気になっていたので、
方法の1つとしてすべて整数でやるというのはどうですか?
そうすればシリアル値の”誤差”を気にしなくてよくなります。


ハトさんのを元に整数処理にして、日付越えを入れてみました。
このやり方なら上限金額もOKなはずです。
'********************************************************
Sub Test_Time()

Dim ws As Worksheet

Dim SDate As Date
Dim EDate As Date
Dim MDate As Long

Dim STime As Long
Dim ETime As Long

Dim TVal As Long
Dim NVal() As Long

  MDate = 0
  TVal = 0
  i = 0
  ReDim NVal(i)
  NVal(i) = 0

  Set ws = ThisWorkbook.Worksheets("Sheet1")
 
  SDate = ws.Range("A1").Text
  EDate = ws.Range("C1").Text
  STime = (CLng(Format(ws.Range("B1").Text, "h")) * 60) + CLng(Format(ws.Range("B1").Text, "n"))
  ETime = (CLng(Format(ws.Range("D1").Text, "h")) * 60) + CLng(Format(ws.Range("D1").Text, "n"))

  MDate = DateDiff("d", SDate, EDate)
  ETime = ETime + (1440 * MDate)
  
  Do
    Select Case STime
      Case Is >= 1200      '20:00
        STime = STime + 30
        NVal(i) = NVal(i) + 300
      Case Is >= 360      '6:00
        STime = STime + 20
        TVal = TVal + 400
        If NVal(i) <> 0 Then
          i = i + 1
          ReDim Preserve NVal(i)
        End If
      Case Else
        STime = STime + 60
        NVal(i) = NVal(i) + 200
    End Select
    
    If STime >= 1440 Then      '24:00
      STime = STime - 1440
      ETime = ETime - 1440
    End If
    
    If STime >= ETime Then Exit Do
  Loop

  For i = LBound(NVal) To UBound(NVal)
    If NVal(i) > 1500 Then
      TVal = TVal + 1500
    Else
      TVal = TVal + NVal(i)
    End If
  Next i

  ws.Range("E1").Value = TVal
End Sub
'********************************************************


余談ですが、
>もし5:50から7:10でしたら、最初の1時間(5:50〜6:50)は\200、
>その後は(6:50〜7:10)は\400となります。
>それぞれの時間帯に1分でも入っている場合はその料金が採用されます。
これ、ちょっと微妙に思えるのですが・・・
3:59〜6:59 ¥600
4:01〜6:59 ¥1600
仕様・・・
1 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 発言

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