使用 Excel 更改日期格式

Posted

技术标签:

【中文标题】使用 Excel 更改日期格式【英文标题】:Changing date formats in Excel using 【发布时间】:2016-04-16 17:01:42 【问题描述】:

我有一个 Excel 表,其中一列的日期日期格式为 "yyyyMMdd",我想将其格式化为 "yyyy/MM/dd"

为此,我尝试在宏中使用以下行,但它将单元格数据转换为“###.....#”,而不是更改日期格式。

Sheet1.Range("C3", "C302").NumberFormat = "yyyy/mm/dd"
...
result = "#####...#"
...

有人能告诉我为什么会这样吗?有没有其他方法可以做到这一点?

【问题讨论】:

【参考方案1】:

如果日期/时间单元格出现满 # 符号,则表示该列太窄而无法显示格式。

使列更宽以适应所选日期格式的整个宽度。

查看此屏幕截图。两列具有相同的格式。 A 列太窄,无法显示日期。 B 列足够宽。

在聊天中讨论后编辑:

您在聊天中发布的屏幕截图是这样的:

您所指的“日期”不是日期。它们是远高于 Excel 用于千禧年日期的数字。

Excel 将日期存储为整数,从 1 开始表示 1/1/1900。您在屏幕截图中显示的数字远高于 Excel 日期。

您的号码 20150930 不是 Excel 认为的 2015 年 9 月 30 日。对于 Excel,该日期将是数字 42277,您可以将其完美地格式化为该日期。

使用格式字符串格式化的“日期”显示为 ##### 的原因是数字远高于 Excel 可以解释为日期的数字。

您需要将数字转换为真实的 Excel 日期,这可以通过一个简单的公式来完成。使用单元格 A1 中的第一个“日期”数字,您可以使用公式

=DATE(LEFT(A1,4),MID(A1,5,2),RIGHT(A1,2))

在此屏幕截图中返回 Excel 认为是 2015 年 9 月 30 日的真实日期的值:

所以,所有 # 符号的原因是您尝试格式化为日期的数字对于 Excel 算法中的日期来说太大了。

【讨论】:

我试图增加列的宽度。但对于所有宽度,它只显示“#####...###”。 :( 您的自定义格式字符串是什么?如果格式化字符串导致错误,# 符号将保留。 它显示“yyyy/mm/dd”/检查右键单击单元格->单元格格式->自定义。显示“yyyy/mm/dd”。但在示例子句的同一窗口中,它显示字符串“##########...##” 将示例文件发布到文件共享服务并在此处发布链接。 很好的文档【参考方案2】:

请试试这个..

=LEFT(A1,4)&"/"&MID(A1,5,2)&"/"&RIGHT(A1,2)

【讨论】:

【参考方案3】:

有了所有好的答案,我将添加简单的 vba 解决方案...

Option Explicit
Sub FormatDate()
    Dim xlRng As Range
    Dim xlShtRng As Range

    '//- Date format 20160112
    Set xlShtRng = [A3:A10] '//- or [A3, A6, A10]

    For Each xlRng In xlShtRng
        xlRng.Value = DateSerial(Left(xlRng.Value, 4), Mid(xlRng.Value, 5, 2), Right(xlRng.Value, 2))
        xlRng.NumberFormat = "yyyy/mm/dd" '//- 2016/01/12
    Next
End Sub

【讨论】:

以上是关于使用 Excel 更改日期格式的主要内容,如果未能解决你的问题,请参考以下文章

excel如何修改日期格式

DB2日期格式更改的方法

Excel表格输入时间是斜杠的格式怎么转换成横杠的格式

为啥excel日期格式会变成数字

Java解析excel 用正则表达式判断日期格式去转换到指定格式

EXCEL更改单元格没变化?