VBA不会将所有日期从文本格式更改为日期格式dd / mm / yyyy

时间:2017-08-17 08:34:19

标签: excel vba excel-vba date

我现在有一个问题很长一段时间..我一直试图找到日期之间的一些差异,并在几分钟内打印结果。但是,我的问题是,即使我添加了一行代码将单元格格式转换为日期格式dd / mm / yyyy,它也不适用于单元格,但仅适用于其中的一部分。此外,对某些人来说,它适用,但它会创建日期格式mm / dd / yyyy。我真的不该做什么。这些日期是来自另一张表的vlookup。所以,我甚至写了一行代码来将它们转换成原始的表格。所以,总而言之,我确实做了两次转换。我的代码如下!请帮帮我:)。

Sheets("TMS").Select
lastrow = Range("B" & Rows.Count).End(xlUp).Row
With Range("K2:K" & lastrow)
    If Not IsEmpty(Range("K2:K" & lastrow)) Then
        .NumberFormat = "mm/dd/yyyy hh:mm"
    End If
End With
Sheets("TheTracker").Select
lastrow = Range("B" & Rows.Count).End(xlUp).Row
With Range("AO2:AO" & lastrow)
    .Formula = "=VLOOKUP(B2,TMS!B:K,10,FALSE)"
    .NumberFormat = "mm/dd/yyyy hh:mm"
    .Value = .Value
End With

4 个答案:

答案 0 :(得分:1)

尝试更好地引用范围,而不使用Select,参考您需要的工作表,并忽略hh:mm。这样的事情可能会起作用:

Public Sub Test()

    Dim lastRow As Long

    With Worksheets("TMS")
        lastRow = .Range("B" & .rows.Count).End(xlUp).Row
        .Range("K2:K" & lastRow).NumberFormat = "mm/dd/yyyy"
    End With

    With Worksheets("TheTracker")
        lastRow = .Range("B" & .rows.Count).End(xlUp).Row
        With .Range("AO2:AO" & lastRow)
            .Formula = "=VLOOKUP(B2,TMS!B:K,10,FALSE)"
            .NumberFormat = "mm/dd/yyyy"
            .value = .value
        End With
    End With
End Sub

答案 1 :(得分:1)

如果日期格式仅应用于少数单元格,则看起来与计算机的区域设置和日期格式不相交。

如果您将计算机设置为将日期显示为DMY,则日期为

  • 1/1/2017将成为真实日期 - 1月1日
  • 12/7/2017将是一个真实的日期 - 7月12日
  • 13/7/2017将是一个真实的日期 - 7月13日

但是

  • 7/13/2017将不是日期,因为日期和月份的顺序是错误的。

具有区域设置的计算机同样适用于将日期显示为MDY,在美国很受欢迎。

  • 1/1/2017将成为真实日期 - 1月1日
  • 12/7/2017将成为真实日期 - 12月7日
  • 13/7/2017不会是真正的约会对象 - 因为没有第13个月。

因此,请检查源数据的显示格式:DMY或MDY?

然后根据计算机的区域设置调整您的VBA例程以拉出月份和日期。

答案 2 :(得分:0)

如果您将日期作为文本而Excel将不会将其视为日期,您可以尝试这样的事情。

Columns("K:K").Select
        Selection.TextToColumns Destination:=Range("K1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
            ActiveSheet.Range("K2").Select

答案 3 :(得分:0)

我猜这些数据来自你OPEN' d的CSV文件。

如果是这种情况,最好再做IMPORT(通常在DATA功能区上)。

执行此操作时,Text Import Wizard将打开,您可以指定传入数据的日期格式。

然后,Excel将所有这些日期转换为真实日期,您将能够应用数字格式。如有必要,可以通过VBA自动执行此IMPORT进程。