如何在一步Excel-VBA中删除日期中的小时和分钟

问题描述 投票:3回答:3

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

excel excel-vba date vba
3个回答
3
投票

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

Range.TextToColumns method快速完成剥离日期时间的日期部分。 fieldinfo参数可以指定您正在使用的DMY格式,并使用适当的xlColumnDataType丢弃时间部分。虽然大多数TextToColumns命令都是“就地”生成的,但如果指定了备用目标,则可以使用备用目标。指定备用目标时,原始数据保持不变。

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


17
投票

要获取日期,请仅使用:

=INT(A2)

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

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

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


0
投票

你可以使用=Today()=NOW()然后改变

© www.soinside.com 2019 - 2024. All rights reserved.