Excel VBA中的日期格式

时间:2014-09-25 10:02:47

标签: excel vba excel-vba

我在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认为长日期应该是“29/09/2014”而不是“2014年9月29日”。 / p>

当我完全删除格式化行时,结果是相同的。

我很抱歉相当冗长的解释,但显然我不了解Excel和VBA如何处理,存储和格式化日期。如果有人能告诉我出了什么问题,我真的很感激!

(注意,在上面的所有代码片段中,我引用了例如Range("A1")这是简写。事实上,循环和选择值涉及更多代码,但我知道这有效,所以我并不担心。上面的摘录只是展示了每个循环中第一个值会发生什么。)

1 个答案:

答案 0 :(得分:1)

Range("E1").NumberFormat = "mm/dd/yyyy"
Range("E1") = Format(new_array(7, 1), "mm/dd/yyyy")