Excel VBA:日期上的TextToColumns(单列,无分隔符)不起作用?

时间:2015-07-28 12:58:36

标签: excel vba excel-vba

我正在尝试使用没有分隔符的TextToColumns格式化一个充满日期的列。这些日期已预先格式化为"dd.mm.yyyy hh:mm:ss",我想将其更改为"dd.mm.yy hh:mm"

这是我的代码:

ActiveSheet.Range("G2:G" & lastRow).Select
With Selection
    .NumberFormat = "dd.mm.yy hh:mm"
    .TextToColumns Destination:=Range("G2"), DataType:=xlDelimited, _
      TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
      Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 4), _
      TrailingMinusNumbers:=True
End With

这是macrorecorder给我的完全代码(并且该过程在录制过程中按预期工作或手动完成),只有一个例外:{ {1}}在宏录制器中显示为Array(1, 4)。但是,这些选项都不适用于VBA。

我在Rick Rothstein的回答中得到了尝试不同Array(1, 1)值的想法:http://www.mrexcel.com/forum/excel-questions/683477-text-column-not-working-within-macro.html 相关:https://msdn.microsoft.com/en-us/library/office/ff193030(v=office.15).aspx

因此,每当我运行这些片段的任何变体时,它似乎都会默默地忽略整个TextToColumn位。没有错误或异常,当我单步执行时它不会跳过代码行 - 它会运行所有内容,但无论出于何种原因,预期的结果都无法实现。

示例数据:

预:
Array

发布(预期结果):
25.06.2015 15:12:20

3 个答案:

答案 0 :(得分:0)

您可以在VBA中使用FORMAT()函数来更改日期范围 请参阅LINK HERE

中的详细信息

答案 1 :(得分:0)

这样的事情可能会起作用

Format(whatEverYouAreChanging.value, "dd-mm-yyyy hh:mm")

将whatEverYouAreChanging更改为您的变量,希望这可行

或者使用自定义格式格式化整列,例如dd / mm / yyyy hh:mm

答案 2 :(得分:0)

如果非循环方法不起作用,则使用循环方法:

Sub dural()
    Dim lastRow As Long, i As Long, t As String, d As Date
    lastRow = ActiveSheet.Cells(Rows.Count, "G").End(xlUp).Row

    For i = 2 To lastRow
        With Cells(i, "G")
            t = .Text
            ary = Split(t, " ")
            bry = Split(ary(0), ".")
            cry = Split(ary(1), ":")
            d = DateSerial(CInt(bry(2)), CInt(bry(1)), CInt(bry(0)))
            d = d + TimeSerial(CInt(cry(0)), CInt(cry(1)), CInt(cry(2)))
            .Clear
            .NumberFormat = "dd.mm.yy hh:mm"
            .Value = d
        End With
    Next i
End Sub

在:

enter image description here

之后:

enter image description here