我无法编写宏来将具有日期和时间信息的单元格分隔到具有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部分,但我还没能在网站上找到任何解决方案。
答案 0 :(得分:1)
你不需要VBA。只需几步,您就可以拥有自己想要的东西。假设数据在Col A中。如果您仍然想要 VBA,则记录以下步骤的宏并简单地修改它。 :)
答案 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