2017-08-17 59 views
0

我现在有很长时间的问题..我一直在尝试查找日期之间的一些差异,并在几分钟内打印出结果。但是,我的问题是,即使我添加了一行代码将单元格格式转换为日期格式dd/mm/yyyy,它不适用于单元格,但仅适用于其中的一部分。另外,对于某些应用,它会创建日期格式mm/dd/yyyy。我真的不知道该怎么做。这些日期是来自另一张表的vlookup。所以,我甚至写了一行代码来将它们转换为原始表格。所以,总的来说,只是可以肯定的是,我做了两次转换。我的代码在下面给出!请帮我:)VBA不会将文本格式中的所有日期更改为日期格式dd/mm/yyyy

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 
+0

为什么'.NumberFormat =“mm/dd/yyyy hh:mm”'??? –

+0

我需要它有这种格式..我还需要小时和分钟 –

+0

请注意,你说你想'dd/mm/yyyy',但你的代码有'.NumberFormat =“mm/dd/yyyy hh:mm “'。为什么不包含'.NumberFormat =“dd/mm/yyyy hh:mm”'? –

回答

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 
+0

不幸的是没有任何改变!当我去日期和检查格式一般,它仍然显示日期,而不是一个数字,所以它仍然是一个文本 –

+0

@PericlesFaliagas尝试添加某处'.Range(“K2:K”&lastRow).value = .Range (“K2:K”和lastRow).value“。或者开始录制一个宏,直到你没有得到你需要的东西。 – Vityata

+0

还没有什么:(日期格式有一半是日期格式,一半日期格式是文本格式,另外一半日期格式的日期格式是mm/dd/yyyy和另一半dd/mm/yyyy。我相信我使用的代码类型有错误,可能会有代码,而不是.NumberFormat可以完成这项工作。 –

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 
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例程以获取月份和日期。

0

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

如果是这样,则最好使用IMPORT(通常在DATA功能区上)。

当您这样做时,Text Import Wizard将打开,您将能够指定传入数据的日期格式。

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