请问各位老师,关于VBA中时间向下取整问题

weixin_38044488 2017-05-08 05:27:40
时间如何向下取整。
如:

18:15
18:45
不满 半小时算整点 : 18:15 为 18:00
超出半小时算半小时: 18:45 为 18:30


请各位老师帮帮忙, VBA代码如何实现
...全文
503 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-05-09
  • 打赏
  • 举报
回复
引用 2 楼 Tiger_Zhao 的回复:
Option Explicit

Sub Main()
    Debug.Print CDate(Fix(CDate("18:15") * 48) / 48)
    Debug.Print CDate(Fix(CDate("18:45") * 48) / 48)
End Sub
18:00:00
18:30:00
开始没明白那个“48”是如何来的,后来知道了…………
Private Sub Command1_Click()
   Dim s$, i&

   Debug.Print "“整点”测试:"
   For i = 0 To 23
      s = i & ":00"
      Debug.Print s, CDate(Fix(CDate(s) * 48) / 48)
   Next
   Debug.Print "“半点”测试:"
   For i = 0 To 23
      s = i & ":30"
      Debug.Print s, CDate(Fix(CDate(s) * 48) / 48)
   Next
End Sub
但是这样的结果有问题啊。 有一些地方会“相差半小时”。
“整点”测试:
0:00          0:00:00 
1:00          0:30:00 
2:00          1:30:00 
3:00          3:00:00 
4:00          3:30:00 
5:00          5:00:00 
6:00          6:00:00 
7:00          7:00:00 
8:00          7:30:00 
9:00          9:00:00 
10:00         10:00:00 
11:00         10:30:00 
12:00         12:00:00 
13:00         12:30:00 
14:00         14:00:00 
15:00         15:00:00 
16:00         15:30:00 
17:00         17:00:00 
18:00         18:00:00 
19:00         18:30:00 
20:00         20:00:00 
21:00         21:00:00 
22:00         21:30:00 
23:00         23:00:00 
“半点”测试:
0:30          0:00:00 
1:30          1:30:00 
2:30          2:30:00 
3:30          3:30:00 
4:30          4:30:00 
5:30          5:00:00 
6:30          6:00:00 
7:30          7:30:00 
8:30          8:30:00 
9:30          9:00:00 
10:30         10:30:00 
11:30         11:30:00 
12:30         12:30:00 
13:30         13:30:00 
14:30         14:00:00 
15:30         15:30:00 
16:30         16:30:00 
17:30         17:00:00 
18:30         18:30:00 
19:30         19:30:00 
20:30         20:00:00 
21:30         21:30:00 
22:30         22:30:00 
23:30         23:00:00 
weixin_38044488 2017-05-09
  • 打赏
  • 举报
回复
引用 2 楼 Tiger_Zhao 的回复:
Option Explicit

Sub Main()
    Debug.Print CDate(Fix(CDate("18:15") * 48) / 48)
    Debug.Print CDate(Fix(CDate("18:45") * 48) / 48)
End Sub
18:00:00
18:30:00
谢谢老师的解答,对我非常有用
weixin_38044488 2017-05-09
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
感觉你的“规则”真有点怪。
Option Explicit

Private Function FixTime(ByVal sTime As String) As String
   Dim h As Long
   h = Hour(sTime)
   If (Minute(sTime) >= 30) Then
      sTime = h & ":30"
   Else
      sTime = h & ":00"
   End If
   FixTime = sTime
End Function

Private Sub Command1_Click()
   MsgBox FixTime("18:15"), 64      ' 18:00
   MsgBox FixTime("18:30"), 64      ' 18:30
   MsgBox FixTime("18:45"), 64      ' 18:30
End Sub
谢谢老师的解答,对我非常有用
Tiger_Zhao 2017-05-09
  • 打赏
  • 举报
回复
Option Explicit

Sub Main()
    Debug.Print CDate(Fix(CDate("18:15") * 48) / 48)
    Debug.Print CDate(Fix(CDate("18:45") * 48) / 48)
End Sub
18:00:00
18:30:00
舉杯邀明月 2017-05-08
  • 打赏
  • 举报
回复
感觉你的“规则”真有点怪。
Option Explicit

Private Function FixTime(ByVal sTime As String) As String
   Dim h As Long
   h = Hour(sTime)
   If (Minute(sTime) >= 30) Then
      sTime = h & ":30"
   Else
      sTime = h & ":00"
   End If
   FixTime = sTime
End Function

Private Sub Command1_Click()
   MsgBox FixTime("18:15"), 64      ' 18:00
   MsgBox FixTime("18:30"), 64      ' 18:30
   MsgBox FixTime("18:45"), 64      ' 18:30
End Sub

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧