如何使用VBA整理excel中的日期和时间?
例如,用户从日历中选择复制的值,单元格A6 =“08/25/2016 09:02:00”
我在15分钟内拉数据所以我希望它是A6 =“08/25/2016 09:00:00”
因此,如果用户选择的任何日期和时间不是15分钟的倍数,则应该返回前15分钟的间隔值并提取数据。
答案 0 :(得分:4)
拉出分钟,将日期部分放下以摆脱时间,然后通过使用TimeSerial构建它来将其添加回来:
Private Sub Example()
Dim foo As Date
foo = CDate("08/25/2016 09:02:00")
Dim minutes As Long
minutes = Minute(foo)
minutes = 15 * (minutes \ 15) 'Round down by 15 minute increments
foo = Int(foo) + TimeSerial(Hour(foo), minutes, 0)
Debug.Print foo
End Sub
编辑像@Pekka提到的那样,这也可以使用工作表公式来完成 - 这相当于上面的代码VBA:
=INT(A6)+TIME(HOUR(A6),INT(MINUTE(A6) / 15) * 15, 0)
答案 1 :(得分:1)
VBA不是必需的。这可以直接在Excel中完成。 =FLOOR(A6,TIME(0,15,0))
会将日期时间值截断为前一个15分钟的值。
Excel将日期值表示为自初始日期(大约1900,取决于版本)以来的浮点值,时间作为值的小数部分。
当然,您可以以相同的方式在VBA代码中使用相同的表达式。
作为Jeeped条评论,这是一个更加自我记录的替代方案,可用于最初建议的更直接的表达式=int(A6*24*4)/4/24
。
答案 2 :(得分:1)
其他答案的缩短版本
=MRound(A6, 1/96)
在VBA中可以
[a6] = [MRound(A6, 1/96)]
或向下舍入
[a6] = [Int(A6*96)/96]