使用更改Excel中的日期格式

时间:2016-01-12 07:16:38

标签: excel vba excel-vba date

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

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

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

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

3 个答案:

答案 0 :(得分:4)

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

使列更宽以适应所选日期格式的全宽。

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

enter image description here

在聊天中讨论后编辑:

您在聊天中发布的屏幕截图是: enter image description here

"日期"你指的不是日期。它们的数字远高于Excel在这个千禧年中用于日期的数字。

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

enter image description here

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

你"约会的原因"使用格式字符串格式化为#####,表示数字高于Excel可以解释为日期的数字。

您需要将您的数字转换为真实的Excel日期,您可以使用简单的公式来完成。随着你的第一个"日期"单元格A1中的数字,您可以使用公式

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

在此屏幕截图中返回Excel视为Sep-30-2015的真实日期的值:

enter image description here

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

答案 1 :(得分: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

答案 2 :(得分:2)

请试试这个..

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