Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在VBA中分离日期和时间_Excel_Vba - Fatal编程技术网

Excel 在VBA中分离日期和时间

Excel 在VBA中分离日期和时间,excel,vba,Excel,Vba,在我的数据中,日期时间格式在一列中为15-02-2019 19:56。 我想将日期和时间分隔列。假设您的日期和时间在单元格A1中 在B1中使用以下公式 =--TEXT(A1,"dd/MMM/yyyy") 并在C1中使用以下公式 =--TEXT(A1,"hh:mm:ss") 并选择B1和C1,自定义日期和时间格式 请注意,当使用日期/日期时间时,Excel在单元格中显示的内容并不是Excel在单元格中实际保存为值的内容。Excel为该日期保存的值实际上是4351183056,这是自1900-0

在我的数据中,日期时间格式在一列中为
15-02-2019 19:56

我想将日期和时间分隔列。

假设您的日期和时间在单元格A1中

在B1中使用以下公式

=--TEXT(A1,"dd/MMM/yyyy")
并在C1中使用以下公式

=--TEXT(A1,"hh:mm:ss")
并选择B1和C1,自定义日期和时间格式


请注意,当使用日期/日期时间时,Excel在单元格中显示的内容并不是Excel在单元格中实际保存为值的内容。Excel为该日期保存的值实际上是
4351183056
,这是自
1900-01-01
以来的天数。因此,时间是一天的一部分,因此由该值逗号后的部分表示

所以你可以使用

  • =INT(B1)
    仅获取日期(并将单元格格式化为日期)
  • =B1-INT(B1)
    仅获取时间(并将单元格格式化为时间)
或者只使用与B列相同的值(
=B1
在C和D中),只将一个格式化为日期,一个格式化为时间


在VBA中,可以使用相同的技术:

Option Explicit

Public Sub SplitDateAndTime()
    Dim MyDateTime As Date
    MyDateTime = Range("B1").Value

    'get date
    Range("C1").Value = Int(MyDateTime)
    Range("C1").NumberFormat = "YYYY-MM-DD"

    'get time
    Range("D1").Value = MyDateTime - Int(MyDateTime)
    Range("D1").NumberFormat = "hh:mm:ss"
End Sub

将单元格内容复制到另一列的可能副本。将一个单元格格式化为数据,将另一个单元格格式化为时间。Excel将所有日期时间信息存储为一个很长的数字。您看到的是单元格格式的结果,而不是单元格中存储的内容。@newguy您链接的副本实际上是一个糟糕的解决方案,因为
Format()
为这两个(日期和时间)返回一个
字符串,并让Excel猜测将其转换为正确的日期值。永远不要将日期转换为字符串,除非它仅用于显示目的。Intead始终返回一个真实的日期值(
Long
或者如果是与时间
Double
)并使用数字格式更改其在Excel中的显示方式。如果你使用字符串,那就不可能用它来计算了!这不是一个好主意,因为
=--TEXT(A1,“dd/MMM/yyyy”)
中使用的格式必须取决于操作系统使用的本地化,否则会得到
#值错误。•由于全球化正在发展,这将很容易失败永远不要将日期转换为字符串,除非它仅用于显示目的