| 
    
     |  | ▼みゆき さん: >受付時間から退出時間(現在時間)までを算出したいのですが、その計算式は出来ました。
 >さらにそこから、退出時間が3時間以内の人までは30分ごとに管理し、それ以降は1時間毎に管理したいのですが、表示を00:30→0.5h(02:30分なら→2.5h、05:00は5h)と表示させたいのです。
 >「24」をかけると書いてあった記事を見てまねてみましたが上手く表示してくれません・・・。
 >
 >ようは駐車場の管理なのです。
 >30分まで無料、以降30分ごとに課金して、さらに3時間を超えるものは1時間毎に課金と言った具合です。(なので30分未満は00:16→0hと表示)
 >
 >IF文で分岐させればよいのでしょうが、時間の変換が分からず苦労しています。
 >何度もすみません。
 
 
 はーい りすりすのWindows講座のお時間です
 
 
 小数部はその日の経過時間(24 時間制)です。
 
 =(NOW()-TODAY())*24
 は、0時からの経過時間
 整数部分が 時間となります。
 用途的にはそのまま使った方がいいので時間は切り取りません。
 
 さらに、60をかけると 分になります。
 =(NOW()-TODAY())*24*60
 もうおわかりだと思います
 退出時間- 受付時間
 におきかえると
 (退出時間- 受付時間 )*24*60
 が経過した分です。
 その数字にたいして、
 条件文をつければいいわけです。
 
 
 i=(退出時間- 受付時間)*24*60
 
 
 ですから、
 下記のように 分で条件文を分岐すればいいことがわかると思います。
 
 おもしろそうだから
 つくちゃった(^_^;)
 
 
 Private Sub CommandButton1_Click()
 Dim i, h As Date
 Dim s As String
 
 i = (Now - Int(Now)) * 24 * 60
 ' TODAY数値がおかしいのでデバッグするとTODAY がEmpty値になる  内部バグか
 ' Int(Now)で代用
 ' i = 181 ' ここの数字変えて試すといいです、
 
 If (i < 30) Then
 s = "0h"
 ElseIf (30 <= i) And (i < 3 * 60) Then
 h = Int(i / 30) * 30 ' 30で割り 0か30になるように調整
 If (h Mod 60) < 30 Then ' あまりがないので30分未満
 s = Format(h / 60, "0h")
 Else         ' あまりがあるので30分〜59分
 s = Format(h / 60, "0.0h")
 End If
 ElseIf (i >= 3 * 60) Then
 h = Int(i / 60) ' 時間に直す
 s = Format(h, "#h")
 End If
 
 ' Cells(1, 1) = s
 End Sub
 
 |  |