car*_*_cs 3 excel vba date 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
Run Code Online (Sandbox Code Playgroud)
C栏
没有时间和分钟的时间:
22/05/2015
11/06/2015
28/05/2015
26/05/2015
25/05/2015
25/05/2015
Run Code Online (Sandbox Code Playgroud)
我设法通过创建一个转换为文本的列B来解决这个问题
=Text(A2;"DD-MM-AAAA")
Run Code Online (Sandbox Code Playgroud)
然后C列将文本转换为值
=Data.value(B2)
Run Code Online (Sandbox Code Playgroud)
虽然这个过程有效,但它会给我带来很多不必要的数据,我想知道我是否可以在一步中使用vba-excel宏自动执行此操作.我还希望C列中的数字日期始终等于A列中的日期数和相同顺序中的日期.
Sco*_*ner 16
要获取日期,请仅使用:
=INT(A2)
Run Code Online (Sandbox Code Playgroud)
并格式化到目前为止.这是有效的,因为excel中的日期是自1899年12月31日以来的天数,因此例如2016年5月10日是42500天.
时间是基于24小时的小数.因此,2016年5月10日12:00:00相当于42500.5.
所以,为了得到我们删除小数的日期.INT()就是这么做的.
小智 4
这是用 [excel-vba] 标记的,因此我将提供完整的列时间剥离解决方案。
\n\nRange.TextToColumns方法可以快速剥离日期时间的日期部分。fieldinfo参数可以指定您正在使用的 DMY 格式,并使用适当的xlColumnDataType丢弃时间部分。虽然大多数 TextToColumns 命令都是“就地”制作的,但如果指定,则可以使用备用目标。当指定备用目的地时,原始数据将保持不变。
\n\nOption Explicit\n\nSub stripTime()\n Dim i As Integer\n With Worksheets("Sheet1")\n \'check to see if A1 is a date or a column text label\n i = Abs(Not IsDate(.Cells(1, 1).Value))\n With .Range(.Cells(1 + i, "A"), .Cells(.Rows.Count, "A").End(xlUp))\n .TextToColumns Destination:=.Cells(1, "C"), DataType:=xlFixedWidth, _\n FieldInfo:=Array(Array(0, xlDMYFormat), Array(10, xlSkipColumn))\n \'optionally assign a custom number format\n .Offset(0, 2).NumberFormat = "[color10]dd-mmm-yyyy_)"\n \'optionally autofit the column width\n .Offset(0, 2).EntireColumn.AutoFit\n End With\n End With\nEnd Sub\n
Run Code Online (Sandbox Code Playgroud)\n\n处理后,A 列中保留原始日期时间,C 列中保留真正的仅日期值。
\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0