在VBA中标准化有关时间的日期

时间:2018-07-29 15:55:08

标签: excel vba date time integer

我知道这个问题已经讨论了很多-但实际上我还没有找到这个问题的最终答案。 我想从我的VBA(Excel)脚本中的某个日期开始“删除”(或标准化)时间。例如:

20.12.2017 15:16

应转换为

20.12.2017 00:00

据我所知,作为Format()或NumberFormat()的函数只会更改外观/格式,而不会更改值本身。就我而言,有必要实际更改该值,即从43089,64(等于20.12.2017 15:16)向下舍入到43089,00(等于20.12.2017 00:00)。 人们经常建议使用int(),其他人则认为这可能会导致溢出,因为整数限制为32767(似乎合法),因此应使用CLng。但是,当我改用CLng时,它将舍入到43090,这不是我的目标。然后其他人再次提议将日期缩短为字符串或将CLng()与floor()或rounddown()结合使用。

有人可以告诉我我是否可以实际使用int()或是否可能导致溢出?否则,什么是安全高效的解决方案?

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

Int()返回与传递的数据类型相同的数据类型,因此不会造成溢出。不过Fix()对此用法更好,因为它处理负数的方式(例如,纪元日期之前的日期)。对于负数,Int()返回比输入低的下一个数字,其作用是减去一天。 Fix()只是删除浮点类型的非整数部分:

Debug.Print Int(-1.5)   'returns -2
Debug.Print Fix(-1.5)   'returns -1