VB脚本或类似的将一列“timestamp”分成两个“date”和“time”

时间:2017-08-31 00:13:31

标签: excel excel-vba vba

我已将大量数据导入excel,但第一列是一列中的时间戳数据

Timestamp
  1. 03/04/17 00:00
  2. 03/04/17 01:00
  3. 03/04/17 02:00
  4. 03/04/17 02:00
  5. 如果有人愿意建议运行脚本或类似的最快方式分成两列“日期”和“时间”,那将非常感谢。

5 个答案:

答案 0 :(得分:0)

您可以将所有日期和时间复制到文本编辑器中,将空格替换为,然后导入数据,然后使用逗号创建文本文件excel,选择逗号作为分隔符,现在您应该有两列此数据,而不使用任何宏或公式来执行此操作。

答案 1 :(得分:0)

“使用LEFT / RIGHT公式提取x个字符”,遗憾的是,此数据的时间格式为dd / mm / yyyy hh:mm,因此左右公式提取的时间戳编号不是时间。

我发现的工作是

= TEXT(A1,“hh:mm”)将时间拉出到另一个单元格中 = TEXT(A1,“dd / mm / yyyy”)仅抽出日期。

答案 2 :(得分:0)

如果数据在A栏中,我会使用以下功能:

B列中的

:= DATEVALUE(TEXT(A1,“mm / dd / yy”))格式为日期

列C中的

:= TIMEVALUE(TEXT(A1,“hh:mm”))格式为时间

这样,数据分别作为日期和时间值保留。

答案 3 :(得分:0)

日期/时间只是一个数字,整数表示日期,余数表示一天中的时间 因此,今天午夜(2017年9月4日)的数字为42982,即自1900年1月1日以来的天数。

今天中午的数字是42982.5 - 一天中途。

因此,您在单元格A1中的日期/时间可以使用=INT(A1)并格式化为日期以仅返回日期。

您可以使用=A1-INT(A1)格式化时间来仅返回时间   请注意,这会丢失数字中的日期信息 - 中午现在由0.5表示,与00/01/1900 12:00相同。

最好将日期/时间添加到两列,并将其格式化为仅日期,将另一个格式化为时间。任何超过一天的计算都是正确的。

答案 4 :(得分:0)

使用数组 在这里,您可以在A列的源数据中找到一些使用数组的代码行。日期和时间部分的分割值将写回到相邻的两列B和C列中。

备注使用数组循环而不是通过范围直接循环,性能总是好得多。

<强>代码

Sub splitDateValues()
  Dim vArr      As Variant   ' array based on source data in columns A (to C)
  Dim temp      As Variant   ' dates split
  Dim i         As Long      ' row number
  Dim lstRow    As Long      ' last row in source data
  Dim rngSource As Range     ' source data (in column A, including a head line in A1)
' A. define data source range (column A) and include adjacent columns B and C to write back split values
  With ThisWorkbook.Worksheets("MyDateSheet")
    ' find last row in source
      lstRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    ' set source range including columns B and C
       Set rngSource = .Range("A1:C" & lstRow)
  End With

  ' B. build one based array vArr out of source data range
  ' (instead of looping directly thru range)
    vArr = rngSource.Value

  ' C. loop thru array and split values (beginning in second line)
    vArr(1, 2) = "Date": vArr(1, 3) = "Time"
    For i = 2 To UBound(vArr)

    ' split date values into temp variable consisting of two portions
      temp = Split(vArr(i, 1) & String(2, " "), " ")
      If temp(1) = "" Then temp(1) = "0:0:0"
    ' one based 2-dimensional array vArr gets zero based split values
      vArr(i, 2) = temp(0)  ' date Portion temp(0)
      vArr(i, 3) = temp(1)  ' time Portion temp(1)

    Next i

  ' D. write array back to worksheet
    rngSource = vArr

End Sub