【问题标题】:Date Formatting in Excel VBAExcel VBA中的日期格式
【发布时间】:2023-03-20 09:46:01
【问题描述】:

我在 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 日”。

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

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

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    试试

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

    【讨论】:

    • 这行得通,谢谢。不过,我不太确定我明白为什么......日期实际上是如何存储在数组中的?
    • 它存储在dd/mm/yyyy 中,因此首先您预先格式化单元格以接受mm/dd/yyyy 格式的日期,然后将数组中的日期格式化为mm/dd/yyyy 输出到单元格
    • 我的问题是相反的,我想要格式“dd/mm/yyyy”。我将数据值存储在名为init_date 的日期变量中。我用Debug.Print Month(init_date)检查了var的类型,结果在VBA中是正确的,但是当我将var复制到Excel单元格时,分配失败,然后交换月份和日期值。我试过@Meehow sn-p 但我不适合我。
    猜你喜欢
    • 2013-11-17
    • 2015-08-31
    • 1970-01-01
    • 2013-04-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2017-06-03
    相关资源
    最近更新 更多