date和时间文本到列

我有一个文本列macros的问题。

我有一个带有不同macros的Excel文件,一张表是用户在运行其中一个macros之前需要填写的表。 两个单元格是date和时间。

我需要将date从一个文件复制到另一个文件,然后将date从例如19/03/2016拆分为3列日,月和年,即19,3和2016.当我录制macros时一切正常,但是当我运行macros,date转换为美国格式,我得到3日,19日和2016年。同样适用于时间,如果我有例如15:30,当loggingmacros我得到15和30,但是当我运行macros我得到3 &30。

以下是我使用的代码:

Sub Reporting_Start_Date() Application.Workbooks(1).Activate Sheets("Activity Info").Select Range("C8").Select Selection.Copy Application.Workbooks(2).Activate Range("O2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Selection.NumberFormat = "m/d/yyyy" Selection.TextToColumns Destination:=Range("O2"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _ :="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _ TrailingMinusNumbers:=True Selection.NumberFormat = "0" End Sub 

而logging的时间macros是:

 Sub Reporting_Start_Time() Application.Workbooks(1).Activate Sheets("Activity Info").Select Range("C9").Select Selection.Copy Application.Workbooks(2).Activate Range("R2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Selection.NumberFormat = "[$-F400]h:mm:ss AM/PM" Selection.TextToColumns Destination:=Range("R2"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _ :=":", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 9)), _ TrailingMinusNumbers:=True Selection.NumberFormat = "0" End Sub 

假设我们有一个date为dd / mm / yyyy格式的单元格。 select它并运行:

 Sub DateSplitter() Dim ary With Selection ary = Split(.Text, "/") .Offset(0, 1) = ary(o) .Offset(0, 2) = ary(1) .Offset(0, 3) = ary(2) End With End Sub 

在这里输入图像说明

你可以编写类似的代码。 代码可以很容易地修改以处理列中的所有date或时间等。

成员@加里的学生提供了出色的解决scheme。 与此类似,下面的代码允许同时将包含Day,Month和Year的整个数组粘贴到Range(“A1:C1”):

 Sub TestDateParsing() Range("A1:C1") = ParseDateDDMM("16/03/2016") End Sub Function ParseDateDDMM(DateDDMM As String) As String() ParseDateDDMM = Split(DateDDMM, "/") End Function 

这将导致性能略有改善。