2017-08-17 56 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實現自動化。