一步删除日期中的小时和分钟

6

我经常得到像列A中显示的日期,但我需要它们像列C中显示的那样。如何在不创建辅助列B的情况下完成?我需要这样做是因为小时和分钟会影响我想要实现的目标。

列A

带有小时和分钟的时间:

22/05/2015 14:57
11/06/2015 15:40
28/05/2015 08:27
26/05/2015 14:51
25/05/2015 14:18
25/05/2015 15:51

列 C

没有小时和分钟的时间:

22/05/2015 
11/06/2015 
28/05/2015 
26/05/2015
25/05/2015
25/05/2015

我通过创建一个将B列转换为文本的列来解决了这个问题。
=Text(A2;"DD-MM-AAAA")

然后列 C 将文本转换为值

=Data.value(B2)

虽然这个过程可以运行,但是会产生很多不必要的数据,我想知道是否可以通过 宏来自动完成这个过程。我还希望列C中的日期数始终等于列A中的日期数,并且按照相同的顺序排列日期。

2
为什么不直接重新格式化列A以隐藏时间呢? - Gary's Student
2
@findwindow 不错的想法,但是LEFT函数用于字符串操作,所以你需要将它包装在DATEVALUE函数中=DATEVALUE(LEFT(A1,10)) - SierraOscar
@MacroMan 我只是在考验你 =P - findwindow
1
@findwindow 我知道,从来没有怀疑过你! - SierraOscar
@Gary'sStudent 猜测 OP 想要它在 C 列中?不过,再说一遍,复制/粘贴到 C 中,然后格式化 XD。 - findwindow
@Gary'sStudent 我的猜测是,OP希望在其他公式中处理日期,而无需使用<和>括起来的条件。 - Scott Craner
4个回答

22

仅获取日期,请使用:

=INT(A2)

将日期格式化。 这是因为在Excel中,日期是自1899年12月31日以来的天数,例如2016年5月10日是自那日以来的42500天。

而时间则是基于24小时的小数。因此,2016年5月10日12:00:00相当于42500.5。

要仅获取日期,我们将删除小数部分。 INT()正是这样做的。


我感到被智取了,没有发现这个:O。这个公式完美地工作! - carlos_cs
3
@carlos_cs 我们都有过这样的时刻,我们会过度思考问题,使它变得比必要的更加复杂。有时候需要别人帮助指出更简单的方法。 - Scott Craner
@carlos_cs 哈哈,我们都被 Scott 给智商碾压了 ^_^; 修改一下:我不应该说“我们”,而是“我”。 - findwindow
=INT(NOW()) 返回的是 "5/26/2016 0:00"? - Adavid02
1
@Adavid02 现在将单元格格式设置为仅显示日期而不是时间。可以使用“短日期”或自定义格式 m\d\yyy - Scott Craner
哇,Scott先生,我刚刚看到了您的这篇帖子,因为您在评论中添加了,它可以追溯到2016年,太神奇了!确实是一篇有价值的帖子! - undefined

4
我将提供完整的列时间剥离解决方案,因为此内容标记为[excel-vba]。Range.TextToColumns方法可以快速剥离日期时间部分。 fieldinfo参数可以指定您使用的DMY格式,并使用适当的xlColumnDataType丢弃时间部分。虽然大多数TextToColumns命令是“就地”执行的,但如果指定了备用destination,则可用备用目标。指定备用目标时,原始数据保持不变。
Option Explicit

Sub stripTime()
    Dim i As Integer
    With Worksheets("Sheet1")
        'check to see if A1 is a date or a column text label
        i = Abs(Not IsDate(.Cells(1, 1).Value))
        With .Range(.Cells(1 + i, "A"), .Cells(.Rows.Count, "A").End(xlUp))
            .TextToColumns Destination:=.Cells(1, "C"), DataType:=xlFixedWidth, _
                           FieldInfo:=Array(Array(0, xlDMYFormat), Array(10, xlSkipColumn))
            'optionally assign a custom number format
            .Offset(0, 2).NumberFormat = "[color10]dd-mmm-yyyy_)"
            'optionally autofit the column width
            .Offset(0, 2).EntireColumn.AutoFit
        End With
    End With
End Sub

在处理后,您将在列A中保留原始日期时间,并在列C中获得真实的仅日期值。

         strip_date_out_of_datetime


1
哇,这正是我所要求的! - carlos_cs
要小心使用rows.count,因为它也会计算格式化的单元格。 - musbach

0
你可以使用 =Today() 或者 =NOW() 然后修改。

0

10-04-2020 3:09:42 PM 转换为 10.04.2020

使用以下公式:

=IF(ISBLANK(A1),"",TEXT(A1,"DD.MM.YYYY"))

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