1

我在编写宏以将具有日期和时间信息的单元格分隔到具有 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

4 回答 4

1

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

  1. 选择 Col A
  2. 单击Data|Text To Columns|Delimited并选择Space作为分隔符。

在此处输入图像描述

  1. 点击完成
  2. 选择 Col B。按CTRL+ H。先(用空替换,再用空)替换

在此处输入图像描述

  1. 在 Col A 中重新键入标题并将其从 Col B 中删除

在此处输入图像描述

于 2017-06-10T04:51:29.493 回答
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
于 2017-06-10T15:02:34.233 回答
0

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

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

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

于 2017-06-10T02:05:46.640 回答
0

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

在单元格上试试这个:

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
于 2017-06-10T02:13:33.490 回答