我有一张Excel工作表,其中列的日期日期格式为"yyyyMMdd"
,我想将其格式化为"yyyy/MM/dd"
。
为此,我尝试在宏内部使用以下行,但它将单元格数据转换为“### .....#”而不是更改日期格式。
Sheet1.Range("C3", "C302").NumberFormat = "yyyy/mm/dd"
...
result = "#####...#"
...
有人能告诉我为什么会这样吗?有没有其他方法可以做到这一点?
答案 0 :(得分:4)
如果日期/时间单元格中出现#符号,则表示该列太窄而无法显示格式。
使列更宽以适应所选日期格式的全宽。
查看此截图。两列具有相同的格式。 A列太窄,无法显示日期。 B栏足够宽。
在聊天中讨论后编辑:
"日期"你指的不是日期。它们的数字远高于Excel在这个千禧年中用于日期的数字。
Excel将日期存储为整数,从1/1/1900开始为1。您在屏幕截图中显示的数字高于Excel日期。
您的号码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的真实日期的值:
因此,所有#符号的原因是,您尝试格式化为日期的数字对于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)