关于vba:使用以下方法在Excel中更改日期格式

Changing date formats in Excel using

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

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

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

有人可以告诉我为什么会这样吗? 还有其他方法吗?


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

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

查看此屏幕截图。这两列具有相同的格式。 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单元格中使用第一个"日期"数字时,您可以使用以下公式

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

返回此屏幕快照中Excel视为2015年9月30日的真实日期的值:

enter image description here

因此,所有#号的原因是您试图格式化为日期的数字对于Excel算法中的日期而言太大。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
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


请尝试这个。

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