【问题标题】:VBA not changing all dates from text format to date format dd/mm/yyyyVBA 不会将所有日期从文本格式更改为日期格式 dd/mm/yyyy
【发布时间】:2017-08-17 08:34:18
【问题描述】:

我有一个问题很长时间了。我一直试图找出日期之间的一些差异并在几分钟内打印结果。但是,我的问题是,即使我添加了一行代码将单元格格式转换为日期格式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

【问题讨论】:

  • 为什么.NumberFormat = "mm/dd/yyyy hh:mm"???
  • 我需要这种格式.. 我也需要小时和分钟
  • 请注意,你说你想要dd/mm/yyyy,但你的代码有.NumberFormat = "mm/dd/yyyy hh:mm"。为什么不包含.NumberFormat = "dd/mm/yyyy hh:mm"?

标签: vba excel date


【解决方案1】:

尝试更好地参考 Ranges,而不使用 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

【讨论】:

  • 不幸的是,没有任何改变!当我去日期并检查一般格式时,它仍然显示日期,而不是数字,所以它仍然是一个文本
  • @PericlesFaliagas 尝试在某处添加.Range("K2:K" & lastRow).value = .Range("K2:K" & lastRow).value。或者开始录制宏,直到你没有得到你需要的东西。
  • 还是什么都没有 :( 一半的日期是日期格式,一半的日期是文本格式。另外,一半的日期格式是 mm/dd/yyyy 和另一个半 dd/mm/yyyy。我相信我使用的代码类型有错误。可能会有一个代码而不是 .NumberFormat 可以完成这项工作..
  • 尝试在 Excel 中像 11-Jan-2017 这样重写日期。然后再次运行。
  • 问题是我在“TMS”表中查找的值(日期)来自一个平台。所以,我需要使用这种格式,因为它需要自动化.
【解决方案2】:

如果仅将日期格式应用于少数几个单元格,则它看起来与您计算机的区域设置和日期格式脱节。

如果您的计算机设置为将日期显示为 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 例程以提取月份和日期。

【讨论】:

    【解决方案3】:

    如果您将日期作为文本并且 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
    

    【讨论】:

      【解决方案4】:

      我猜数据来自您OPEN'd 的 CSV 文件。

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

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

      Excel 随后会将所有这些日期转换为真实日期,您将能够应用数字格式。如果需要,这个IMPORT 过程可以通过 VBA 自动化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-29
        • 2019-09-09
        • 2021-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多