从数据中删除存储在数组中的整个数据的时间

abs*_*ndo 5 excel datetime vba date

使用Excel VBA,如何将公式Date(year(A1),Month(A1),Day(A1))应用于整个列中的所有日期?目前数据采用日期时间格式(例如30/04/1995 9:35:00 AM),但我只想要日期 - 30/04/1995.

目前所有的日期都存储在一个数组中,我已经尝试过了Columns(data_column).NumberFormat = "[$-1009]d-mmm-yy;@",但是我没有成功地从日期中删除时间.

xid*_*gel 8

如果要在保留时间信息的同时更改数据的显示格式,可以在工作表或图表轴的单元格中使用NumberFormat ="mm/dd/yyyy"之类的内容.

Excel将日期/时间信息存储为浮点数.日期在小数点的左边,天的分数(hh:mm:ss)在右边.如果要从基础数据中删除时间信息,请转换为Long然后再转换为Date.在VBA中(感谢TM的更正):

DateOnly = CDate(Int(DateTime))
Run Code Online (Sandbox Code Playgroud)

在工作表公式中,只需转换为Int并根据需要格式化

DateOnly = INT(DateTime)
Run Code Online (Sandbox Code Playgroud)

希望有所帮助

  • (晚)旁注:-) 考虑到“CLng”函数**四舍五入**到第二天中午之后的*所有*下午时间,这可能会返回不需要的结果。因此,在代码行中使用 *VBA* 的 `Int` 或 `Fix` 函数是完全可以的:`DateOnly = CDate(Int(DateTime))` @xidgel (3认同)

Ral*_*lph 3

Excel 中的所有日期都包含时间:datetime。无法在单元格中仅存储日期或时间。原因是 Excel 将它们存储为数字。小数点之前的任何内容都是日期,小数点之后的任何内容都是时间。因此,即使您将数字 42000 放入单元格中(小数点后不包含任何内容)并将该单元格的格式更改为日期,该值仍将是 2014 年 12 月 27 日(1899 年 12 月 31 日后 42000 天),并带有假定时间为零 = 早上 00:00:00。

由于所有数字都可能在小数点后包含某些内容,因此 Excel 中的所有日期都有时间,并且所有时间都有日期。

您唯一可以做的就是:设置单元格格式以仅显示日期部分或时间部分或两者。因此,您所需要做的就是隐藏时间。

如果要将所有日期更改为小数点后为零,则必须循环遍历数字并将所有值更改为 INT 值。

For intColumn = 1 to 1000
   If Sheet1.Cells(1, intColumn).Value2 = vbNullString then Exit For
   Sheet1.Cells(1, intColumn).Value2 = Int(Sheet1.Cells(1, intColumn).Value2) ' Do not use CInt but Int only!
next intColumn
Run Code Online (Sandbox Code Playgroud)