2017-02-14 130 views
1

我正在從許多工作簿中收集數據。問題是,每個文件中的日期格式並不一致: 16/01/2015 2015年1月6日 2014年3月24日如何在excel中實現數據格式的標準化

我想實現的是「YYYY-MM-DD」格式。在我的代碼中,我有一個負責清除日期列的案例。現在我越來越絕望了,我在代碼中加入了愚蠢的日期格式,但在虛線格式(上面的粗體)中沒有更改。即使我手動選擇列並更改格式類型,或將值複製到.txt文件,然後將其複製回原始圖紙,也嘗試使用新的WorkBook,但沒有任何事情發生。爲什麼在這幾個實例中不可能更改日期值?任何幫助,將不勝感激。這裏是代碼:

 Case 6: 

    sourceWorkbook.Activate 
    sourceWS.Activate 

    sourceWS.Columns(i).Select 
    Selection.NumberFormat = "YYYY-MM-DD;@" 
    sourceWS.Range(Cells(2, i), Cells(lastrw, i)).NumberFormat = "YYYY-MM-DD;@" 


     For j = startRow To lastrw Step 1 
      'Assign the header to the first row 
      NewWorksheet.Cells(1, i) = sourceWS.Cells(startRow, i).Value 

      On Error Resume Next 
       textToFormat = CStr(sourceWS.Cells(j, i).Value) 

       d = CDate(textToFormat) 
       finalDate = Format(textToFormat, "YYYY-MM-DD") 

       NewWorksheet.Cells(j - adjustRows, i) = finalDate 
       'This error handler purpose to handle the header name! 
       If Err Then 

        NewWorksheet.Cells(j - adjustRows, i) = textToFormat 

       End If 

      On Error GoTo 0 

     Next j 
     Set fckFormat = NewWorksheet.Columns(i) 
     fckFormat.NumberFormat = "YYYY-MM-DD;@" 
     NewBook.Activate 
     NewWorksheet.Activate 
     NewWorksheet.Columns(i).Select 
     Selection.NumberFormat = "YYYY-MM-DD;@" 
+0

[太多不同的單元格格式]的可能重複(http://stackoverflow.com/questions/2449755/too-many-different-cell-formats) – R3uK

+0

查看答案開始:**許多人似乎遇到這個問題。** – R3uK

+0

@ R3uK,你的意思是在源表或代碼中?我測試了其他格式的代碼,除了提到的代碼。 – simpleMan

回答

0

正如約旦所說,問題是這個數據被格式化爲一個字符串而不是日期。例如,如果我在新工作簿中輸入上述每個日期,則前兩個日期會被正確檢測爲日期(並可以格式化),而最後一個日期會被視爲文本字符串。這可能會根據您的區域設置而有所不同。

不幸的是,CDate功能也無法將此格式識別爲有效日期。嘗試運行以下,你會得到一個類型不匹配錯誤:

MsgBox CDate("24.03.2016") 

您可以使用替換法在將它轉換爲有效的日期,用斜槓替換點:

Set datecol = Sheets(1).Columns(1) 
datecol.Replace What:=".", Replacement:="/", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 

細胞仍然會被格式化爲一個字符串,但您現在可以使用現有的循環將其轉換爲使用CDATE日期:然後

  d = CDate(textToFormat) 
      NewWorksheet.Cells(j - adjustRows, i) = d 

NumberFormat的將正常工作。

注:我會建議使用CDate而不是格式,以便日期仍然存儲爲值而不是文本。