【问题标题】:Normalize dates in VBA regarding time规范化 VBA 中关于时间的日期
【发布时间】:2019-01-06 00:01:39
【问题描述】:

我知道这个问题已经讨论了很多 - 但我实际上还没有找到这个问题的最终答案。 我想从我的 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() 或者这是否会造成溢出?否则,什么是安全且高效的解决方案?

感谢您的帮助!

【问题讨论】:

  • 将单元格的值设置为 Format 函数的结果 - 这不仅仅是改变外观

标签: excel vba date time integer


【解决方案1】:

Int() 返回的数据类型与传递的数据类型相同,因此不会导致溢出。 Fix() 更适合这种用法,因为它处理负数的方式(例如,纪元日期之前的日期)。在负数的情况下,Int() 返回低于输入的下一个数字,具有减去一天的效果。 Fix() 只是删除了浮点类型的非整数部分:

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

【讨论】:

  • FIXINT 的好点将适用于处理 1900 年之前的 VBA 日期。当然,Excel 不允许 1900 年之前的日期
  • 非常感谢,Fix() 正是我想要的。也感谢你更新我关于 Int 函数的信息!
猜你喜欢
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 2016-04-12
  • 1970-01-01
相关资源
最近更新 更多