我知道这个问题已经讨论了很多——但实际上我还没有找到这个问题的最终答案。
我想从我的 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() 或者这是否会造成溢出?否则,什么是安全且高效的解决方案?
我感谢您的帮助!
最佳答案
Int()
返回与传递相同的数据类型,因此您不会导致溢出。 Fix()
不过,这种用法更好,因为它处理负数的方式(例如,纪元日期之前的日期)。在负数的情况下,Int()
返回小于输入的下一个数字,具有减去一天的效果。 Fix()
简单地删除浮点类型的非整数部分:
Debug.Print Int(-1.5) 'returns -2
Debug.Print Fix(-1.5) 'returns -1
关于excel - 规范化 VBA 中关于时间的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51582057/