错误日期和时间文本到列宏Excel VBA

时间:2017-06-10 01:45:38

标签: excel vba excel-vba text-to-column

我无法编写宏来将具有日期和时间信息的单元格分隔到具有TexttoColumns公式的列中。 这是我在专栏中提供的信息。

开始日期

1900-01-01(00:00)

2008-09-25(12:46)

我想要分割所有列但标题是分开的,日期在一列中,小时在下一列中。

在我拥有的宏中,我能够找到要拆分的列,并且我正确地创建了右侧的新列。但是,我无法将文本添加到列公式中。这是我的代码:

Sub Separate_Date()
  Cells.Find(What:="Fecha Inicio Proceso", After:=Cells(1, 1), 
  LookIn:=xlValues, 
  LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, 
  MatchCase:=False, SearchFormat:=False).Activate

  Col = ActiveCell.Column
  LastRow = ActiveCell.End(xlDown).Row
  Cells(ActiveCell.Row, ActiveCell.Column + 1).EntireColumn.Insert

  Columns(Col).Select
  Range(Selection, Selection.End(xlDown)).Select

  ********Selection.TextToColumns Destination:=Range(Cells(2, Col), 
  Cells(LastRow, Col)), 
  DataType:=xlDelimited, _
  TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
  Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
  :=" ", FieldInfo:=Array(Array(1, 4), Array(2, 4)), 
  TrailingMinusNumbers:=True

 End Sub

我的代码在标有****的行中停止。它显示错误"运行时错误。目的地参考无效"。

我想我的问题出现在Range部分,但我还没能在网站上找到任何解决方案。

4 个答案:

答案 0 :(得分:1)

需要VBA。只需几步,您就可以拥有自己想要的东西。假设数据在Col A中。如果您仍然想要 VBA,则记录以下步骤的宏并简单地修改它。 :)

  1. 选择Col A
  2. 点击Data|Text To Columns|Delimited,然后选择Space作为分隔符。
  3. enter image description here

    1. 点击完成
    2. 选择Col B.按 CTRL + H 。首先将(替换为空,然后将)替换为
    3. enter image description here

      1. 在Col A中重新输入标题并从Col B
      2. 中删除它

        enter image description here

答案 1 :(得分:0)

希望您的日期是真实日期,或者可以使用Cdate([date as string])函数转换为真实日期。真实日期是双精度数,如42896.417349537,其中整数是日,小数表示时间。基本上,您可以在列中使用完全相同的数字,但格式不同。 “mm-dd-yyyy”不显示时间,“hh:mm:ss”不会显示日期。

但是,如果您希望将值分开,显然Int(42896.417349537)将生成一个没有时间的日期,而42896.417349537 - Int(42896.417349537)将生成代表时间的数字。在这两种情况下,您仍然可以通过格式控制显示,即Numberformat属性。

实际上,这在工作表上要比在VBA中容易得多。除非它是一个重复的任务,我建议使用工作表函数和单元格格式来完成所有任务。

答案 2 :(得分:0)

你不需要所有代码来分隔它们......你可以使用格式$()

在单元格上试试这个:

Public Sub SplitDateTime(lRow As Long, lColumn As Long)

  If IsDate(ActiveSheet.Cells(lRow, lColumn)) Then
    Dim dt As Date
    dt = ActiveSheet.Cells(lRow, lColumn)
    MsgBox "Date: " & Format$(dt, "yyyy-mm-dd") & " Time: " & Format$(dt, "hh:mm:ss")
  Else
    MsgBox "This is not a date cell- Row:" & lRow & " - Column:" & lColumn & " - Value:" & ActiveSheet.Cells(lRow, lColumn)
  End If

End Sub

答案 3 :(得分:0)

也许,

Sub Separate_Date()
Dim rngF As Range, Lastrow As Long, i As Long
Dim Col As Integer
Dim vR(), vSplit, vDB

    Set rngF = Cells.Find(What:="FechaInicio Proceso", LookIn:=xlValues, LookAt:=xlWhole)
    Col = rngF.Column
    Lastrow = rngF.End(xlDown).Row
    rngF.Offset(, 1).EntireColumn.Insert

    vDB = Range(Cells(2, Col), Cells(Lastrow, Col))
    ReDim vR(1 To UBound(vDB, 1), 1 To 2)
    For i = 1 To UBound(vDB, 1)
        vSplit = Split(vDB(i, 1), "(")
        vR(i, 1) = Trim(vSplit(0))
        vR(i, 2) = Trim(Replace(vSplit(1), ")", ""))
    Next i
    Cells(2, Col).Resize(UBound(vR, 1), 2) = vR
    Columns(Col + 1).NumberFormatLocal = "hh:mm"
 End Sub