【问题标题】:Remove hours and minutes from dates in one step一步删除日期中的小时和分钟
【发布时间】:2016-09-05 18:07:13
【问题描述】:

我总是得到 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 列 中的日期数和相同顺序的日期。

【问题讨论】:

  • 为什么不直接重新格式化列A来隐藏时间??
  • @findwindow 好主意,但 LEFT 函数用于 string 操作,因此您可以将其包装在 DATEVALUE 函数中 =DATEVALUE(LEFT(A1,10))
  • @MacroMan 我只是在测试你=P
  • @findwindow 我知道,从来没有怀疑过你!
  • @Gary'sStudent 猜测 OP 想要它在 C 列中?然后再复制/粘贴到 C 中,然后格式化 XD

标签: vba-excel excel vba date


【解决方案1】:

要获取日期,请使用:

=INT(A2)

并格式化为日期。这是有效的,因为 excel 中的日期是自 1899 年 12 月 31 日以来的天数,因此例如 2016 年 5 月 10 日是 42500 天。

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

所以为了得到我们删除小数点的日期。 INT() 就是这样做的。

【讨论】:

  • 我没有找到这个:O。这是完美的公式!
  • @carlos_cs 我们都有过过度思考问题并使其变得比需要更复杂的时刻。有时需要其他人帮助指出更简单的方法。
  • @carlos_cs 哈哈我们都觉得斯科特比我们聪明^_^;编辑:我不应该说我们,而是
  • =INT(NOW()) 正在返回“5/26/2016 0:00”?
  • @Adavid02 现在格式化单元格以仅显示日期而不显示时间。使用“短日期”或自定义格式m\d\yyy
【解决方案2】:

这是用 [excel-vba] 标记的,所以我将提供完整的列时间剥离解决方案。

Range.TextToColumns method 可以快速去除日期时间的日期部分。 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 列中留下纯日期值。

         

【讨论】:

  • 哇,这正是我想要的!
【解决方案3】:

您可以使用=Today()=NOW() 然后更改

【讨论】:

    【解决方案4】:

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

    使用这个公式:

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

    【讨论】:

      猜你喜欢
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2018-01-31
      相关资源
      最近更新 更多