vba - Excel VBA 中的日期格式

标签 vba excel

我用 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/

相关文章:

excel - 宏不记录excel中系列的颜色变化

VBA循环和变量 - 找到空白行并将行号放入变量中

vba - 如何使用vba查找系列名称?

vba - 如何选择不包含某个单词的单元格

vba - 如何在 VBA 中查找可用于语法的选项

excel - Application.Inputbox 取消时运行时错误 13 类型不匹配~

excel - 如何使用 Excel 中 ListObject 的范围验证单元格?

excel - 有什么方法可以将更改添加到 Excel 插件所做的撤消/重做堆栈?

excel - 如何在Excel中不显示整数的逗号符号

vba - Excel:如果该行中没有任何单元格着色,则隐藏该行