我用 VBA 编写了一个很长的程序来操作数据集。其中一部分涉及使用和格式化日期,但我无法让它正常工作。
下载的初始数据的日期格式为“yyyy-mm-ddThh:mm:ssZ” - 例如2014-12-11T04:59:00Z。
然后我将它们转换为英国格式的日期“dd/mm/yyyy”。循环遍历所有相关单元格,我使用以下方法:
initial_date = Range("A1").Value
Dim publish_date As Date
publish_date = DateValue(Mid(initial_date,9,2) & "/" & Mid(initial_date,6,2) & "/" & Mid(initial_date,1,4))
Range("A1").Value = publish_date
这似乎工作正常。单元格自动将格式更改为“日期”,当我计算这些日期与另一列中的日期之间的差异时,它工作正常。
然后我再次选取这些日期并添加到数组中:
feed(1, 8) = Range("A1")
然后将这个值转移到另一个数组中:
new_array(7, 1) = feed(1, 8)
最后,我将新数组中的值插入到另一个单元格中。到目前为止,我已经使用了英国日期格式,现在我希望该值以“mm/dd/yyyy”的形式显示。
Range("E1") = new_array(7, 1)
Range("E1").NumberFormat = "mm/dd/yyyy"
这就是出错的地方。
运行上面的代码,日期全部显示为“dd/mm/yyyy”格式。 Excel 将单元格格式更改为“自定义”。找到这些日期和其他日期之间的差异是可行的,因此数据似乎存储正确,但没有按我想要的方式显示。
如果我将代码更改为
Range("E1") = new_array(7, 1)
Range("E1").NumberFormat = "dd/mm/yyyy"
日期仍然无法正确显示。可以任意书写的日期(即日期等于或小于 12)显示正确,但实际上是错误的日期。即 2014-12-11T04:59:00Z 显示为 12/11/2014,这是我想要的,但 Excel 认为日期是 11 月 12 日而不是 12 月 11 日。诸如 29/09/2014 之类的日期不能以英国格式双向书写,但 Excel 无法正确识别,Excel 认为长日期应该是“29/09/2014”而不是“29 September 2014”。
当我完全删除格式行时,结果是相同的。
对于如此冗长的解释,我深表歉意,但对于 Excel 和 VBA 如何处理、存储和格式化日期,显然我有些不明白。如果有人能告诉我出了什么问题,我将非常感激!
(注意,在上面的所有代码片段中,我引用的例如 Range("A1")
这是简写。实际上,循环和选择涉及更多代码值,但我知道这是可行的,所以我并不担心。上面的摘录只是演示了每个循环中第一个值会发生什么。)
最佳答案
尝试
Range("E1").NumberFormat = "mm/dd/yyyy"
Range("E1") = Format(new_array(7, 1), "mm/dd/yyyy")
关于vba - Excel VBA 中的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035775/