如何从一个步骤Excel-VBA中的date中删除小时和分钟

我总是得到如列A中所示的date,但是我需要它们,如列C中所示。我怎样才能做到这一点,而不必创build列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
2015年11月6日
28/05/2015
26/05/2015
25/05/2015
25/05/2015

我设法解决这个问题,创build一个列B转换为文本

=文本(A2; “DD-MM-AAAA”)

然后C列将文本转换为值

= Data.value(B2)

虽然这个过程起作用了,但是却造成了很多不必要的数据,我想知道是否可以通过一个VBA-Excelmacros自动完成这一步。 我也希望列C中的数字date总是等于列A中的date数目,date的顺序相同。

这被标记为[excel-vba],所以我会提供一个完整的列时间剥离解决scheme。

Range.TextToColumns方法可快速删除date时间的date部分。 fieldinfo参数可以指定您正在使用的DMY格式,并使用适当的xlColumnDataType放弃时间部分。 尽pipe大多数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 

处理完后,您将原始date时间保留在列A中,并在列C中保留纯date值。

strip_date_out_of_datetime

获取date只能使用:

 =INT(A2) 

和迄今的格式。 这是可行的,因为excel中的date是自1899年12月31日以来的天数,因此例如2016年5月10日是42500天。

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

所以要得到的date,我们删除小数。 INT()就是这样做的。