VBA中的舍入日期和时间

时间:2016-08-25 21:38:42

标签: vba excel-vba excel

如何使用VBA整理excel中的日期和时间?

例如,用户从日历中选择复制的值,单元格A6 =“08/25/2016 09:02:00”

我在15分钟内拉数据所以我希望它是A6 =“08/25/2016 09:00:00”

因此,如果用户选择的任何日期和时间不是15分钟的倍数,则应该返回前15分钟的间隔值并提取数据。

3 个答案:

答案 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]