Excel VBA質問箱 IV

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

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


43250 / 76732 ←次へ | 前へ→

【38532】Re:料金計算マクロ
発言  ichinose  - 06/6/6(火) 8:57 -

引用なし
パスワード
   ▼mai さん:
おはようございます。
新規ブックの標準モジュールに

'===============================================================
Option Explicit
Sub main()
  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(CStr(st))
    Loop
  For idx = LBound(n_m()) To UBound(n_m())
   t_m = t_m + IIf(n_m(idx) > 1500, 1500, n_m(idx))
   Next
  MsgBox t_m
End Sub
'===============================================================
Sub set_hyo()
  Call set_list
  Range("A1:B1").NumberFormatLocal = "h:mm"
End Sub
'===============================================================
Function set_list() As Range
  Const セル範囲 = "d1:d3"
  Const リスト = "={""0:00"",200,""1:00"",0;""6:00"",400,""0:20"",-1;""20:00"",300,""0:30"",1}"
  Set set_list = Range(セル範囲)
  set_list.Resize(, 4).FormulaArray = Evaluate(リスト)
End Function

としてください。


1.まず、プロシジャーset_hyoを実行してアクティブシートに
  料金表を作成してください。

2.アクティブシートのセルA1が開始時刻、B1が終了時刻とします。

3.尚、入力された時刻が 開始時刻<終了時刻という場合は、終了時刻は翌日の時刻
 だと解釈します。
4.開始時刻、終了時刻を入力後、プロシジャーmainを実行してください。
  料金が表示されます。


入力例

 セルA1  5:00  B1 8:00  料金 2600

 セルA1 21:00  B1 0:00  料金 1500
 (この場合、自動的に翌日の0:00と解釈します)

 セルA1  5:00  B1 7:10  料金 600

 セルA1 19:00  B1 21:00  料金 1800


という結果を表示します。
確認してください。

これ難しいのは、時刻は少数だから誤差が出るんだよね!!
補正したつもりですが、十分な確認をしていません・・。

検証してみてください。

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 発言

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