如何在一步Excel-VBA中删除日期中的小时和分钟
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在一步Excel-VBA中删除日期中的小时和分钟相关的知识,希望对你有一定的参考价值。
我总是得到如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)
虽然这个过程有效,但它会给我带来很多不必要的数据,我想知道我是否可以在一步中使用vba-excel宏自动执行此操作。我还希望C列中的数字日期始终等于A列中的日期数和相同顺序中的日期。
这是用[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列中保留真正的仅限日期值。
要获取日期,请仅使用:
=INT(A2)
并格式化到目前为止。这是有效的,因为excel中的日期是自1899年12月31日以来的天数,因此例如2016年5月10日是42500天。
时间是基于24小时的小数。因此,2016年5月10日12:00:00相当于42500.5。
所以,为了得到我们删除小数的日期。 INT()就是这么做的。
你可以使用=Today()
或=NOW()
然后改变
以上是关于如何在一步Excel-VBA中删除日期中的小时和分钟的主要内容,如果未能解决你的问题,请参考以下文章