Excel 日期转换为字符串

131

在Excel表格的一个单元格中,我有一个日期值,例如:

01/01/2010 14:30:00

我想将日期转换为文本,同时文本的格式必须与日期相同。因此,日期值 01/01/2010 14:30:00 应该显示为 01/01/2010 14:30:00 ,但在内部应该是文本。

如何在Excel中实现?


6
虽然Excel不是完整的集成开发环境(IDE),但如果你需要在Excel中进行数据处理并得到结果,一些VBA编程将会很有意义。 - brichins
10个回答

247
=TEXT(A1,"DD/MM/YYYY hh:mm:ss")

(24小时制时间)

=TEXT(A1,"DD/MM/YYYY hh:mm:ss AM/PM")

(标准时间)


3
关于TEXT函数的详细参考,特别是如何设置格式:请参阅此页面上有关日期和时间格式的指南:http://office.microsoft.com/zh-cn/excel-help/text-function-HP010062580.aspx。 - codea
当我尝试进行此转换时,出现了“#AD?”文本,并且它显示有错误。 - AloneInTheDark
1
@AloneInTheDark 当你从Codea中跟随链接时,格式是有效的,但仅适用于使用英文格式的Windows操作系统。我的操作系统使用荷兰语格式,这意味着例如“DD/MM/YYYY hh:mm:ss”变成了“DD/MM/JJJJ uu:mm:ss”,因为在荷兰语中,“year”是“jaar”,而“hour”是“uur”,即起始字母不同(而“day”、“month”、“minutes”和“seconds”在荷兰语和英语中的起始字母相同)。基本上,将格式的起始字母翻译成您的操作系统语言。 - Sem Vanmeenen
3
而相反的转换是使用 DATEVALUE("01/01/2010") 完成的。 - Zenadix
有没有办法在不指定格式的情况下使用我已经用于日期显示的格式? - palswim
在西班牙格式中,将 yyyy 更改为 aaaa 并使用 TEXTO=TEXTO(B5;"dd/mm/aaaa")(这可能会帮助其他用户) - Dani

10
这里是一种VBA的方法:
Sub change()
    toText Sheets(1).Range("A1:F20")
End Sub

Sub toText(target As Range)
Dim cell As Range
    For Each cell In target
        cell.Value = cell.Text
        cell.NumberFormat = "@"
    Next cell
End Sub

如果你在寻找一个无需编程的解决方案,那么这个问题应该被转移到SuperUser。

7

这里有另一种选择。使用Excel内置的“文本分列”向导。它可以在Excel 2007的“数据”选项卡下找到。

如果您只选择了一列,文件类型和分隔符的默认设置应该可以工作,然后它会提示您更改该列的数据格式。选择文本将强制将其格式化为文本格式,以确保它不被存储为日期。


4
在某些情况下,使用 ' 字符可能有效,但如果保存为 CSV 文件并重新加载,则此方法不可行。
'01/01/2010 14:30:00

4
无法使用TEXT()公式的解决方法
最简单的解决方法是将内容复制粘贴到记事本中,然后在粘贴回Excel之前将列设置为文本。
或者可以使用以下公式实现相同的效果:
=DAY(A2)&"/"&MONTH(A2)&"/"&YEAR(A2)&" "&HOUR(B2)&":"&MINUTE(B2)&":"&SECOND(B2)

1
点赞,因为据我所知,这是唯一不受语言设置影响的有效方法。如果你想分享你的工作,使用TEXT()会给你带来麻烦。即使在一个国家(比如德国),你也会发现有人使用德语和英语配置。 - Dr. V
1
非常感谢并点赞!这对我很有用,因为我无法使用=TEXT(Python库公式)。 - aveLestat

2

我不清楚这个问题的出版年份,可能已经过时了。因此,我希望我的答案更多地是为未来类似问题提供参考。

我不知道是否已经有人给出了与我即将给出的答案类似的答案,但我认为我的答案最简单、最直接、最有效:如果已经有人给出了答案,我很抱歉,但我没有看到。在这里,我使用CStr而不是TEXT来回答:

假设单元格A1包含一个日期,并使用VBA代码:

Dim strDate As String

'Convert to string the value contained in A1 (a date)
strDate = CStr([A1].Value)
您随后可以使用字符串函数(MID、LEFT、RIGHT、LEN、CONCATENATE(&)等)将它作为任何普通字符串进行操作。

1
如果您不使用编程,则按照以下步骤操作: (1)选择列 (2)右键单击并选择“格式化单元格” (3)选择“自定义” (4)在“类型:”下方输入 dd/mm/yyyy hh:mm:ss

1
在Excel 2010中,marg's answer 只适用于我电子表格中的部分数据(这些数据是导入的)。以下解决方案适用于所有数据。
Sub change()
    toText Selection
End Sub

Sub toText(target As range)
Dim cell As range
Dim txt As String
    For Each cell In target
        txt = cell.text
        cell.NumberFormat = "@"
        cell.Value2 = txt
    Next cell
End Sub

0

由于文本是本地化的,当您尝试在不同的文化中共享文件时,它会出现问题。在瑞典,ÅÅÅÅ-MM-DD可能运行得很完美,但在美国、德国或以色列,它会变成垃圾。

合理的解决方案应该是英语在任何地方都被接受,但事实并非如此。

基本上,永远不要使用文本来格式化日期。以下是如何创建ISO格式的日期。使用TEXT确保前导零:

=YEAR(A1)&"-"&TEXT(MONTH(A1);"00")&"-"&TEXT(DAY(A1);"00")

如果你想要倒过来、侧着或者其他什么方式,只需要改变它。 https://www.reddit.com/r/ISO8601/comments/enhlp6/logic_of_the_different_date_time_systems_with/


-1

所选答案对我没有用,因为Excel仍然无法将文本转换为日期。这是我的解决方案。

假设在第一列A中,您有类型为2016/03/25 21:20:00的数据,但存储为文本。然后在B列中写入=DATEVALUE(A1),在C列中写入=TIMEVALUE(A1)

然后在D列中执行=B1+C1以添加日期和时间的数字格式。

最后,通过右键单击E列并选择粘贴特殊 -> 粘贴为值,将D中的值复制到E列中。

突出显示E列中的数字值,并将数据类型更改为日期 - 我喜欢使用YYYY-MM-DD HH:MM:SS的自定义日期格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接