如何將「12/04/2003」這樣的儲存格轉換為日期格式?

如何將「12/04/2003」這樣的儲存格轉換為日期格式?

21/03/2004 不註冊為日期,而 7/3/2004 確實註冊為日期。有誰知道如何刪除月份值從 0 開始的日期值中的所有 0?

因此,黏在左邊距的列不會以某種方式自動轉換。黏在右側的列很好。

http://puu.sh/27CEm

答案1

通常,可以透過使用 DATEVALUE 函數將文字日期轉換為 Excel 日期值(即 Excel 將識別為日期的數字)來解決此問題。用法為 DATEVALUE(日期字串或單元格位址)。

但是,這裡不起作用,因為 1) 在範例字串中,日在月之前,並且 DATEVALUE 期望月後跟日,並且 2) 對於某些日期字串,還包括時間。

這是一個陣列公式替代方案,適用於您提供的範例。需要使用Control- Shift-Enter組合鍵輸入。

  =DATE(
        RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)),

        LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-1),

        LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)-LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1)))
        ) 

這個非常複雜的陣列公式(我希望有人能提供一個更簡單的)使用DATE函數來建構一個Excel日期值。 (當我建置日期時,我碰巧在單元格 F8 中有原始日期字串。)

需要轉換的日期字串不能以其原始形式使用,因為它有時包含時間。代替的是RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8).此公式搜尋日期字串中的空格。如果找到空格,則使用 LEFT 函數取得空格左側的所有字元;如果沒有找到空格,則僅傳回原始字串。

公式的最外層部分是 DATE 函數:當給定年、月和日時,它會產生 Excel 日期。我已經在上面的程式碼中分解了這三部分的計算。

年份計算如下:

  1. 反轉日期字串(按照上面的說明剪掉時間)。
  2. 使用 SEARCH 函數找到該反轉字串中第一個「/」的位置(該斜線實際上是未反轉日期字串中的第一個斜線。)
  3. 使用 RIGHT 函數從日期字串右側取得那麼多字元。

月份計算有以下步驟:

  1. 找到第一個斜線的位置未逆轉的日期字串。
  2. 透過計算該位置與年份計算中確定的第二個「/」的位置之間的差值,確定月份中的字元數(可以是 1 或 2)。
  3. 使用 MID 函數傳回第一個斜線和第二個斜線之間的字元。

Day 的計算是最簡單的。

  1. 使用與月份計算相同的方法計算第一個“/”的位置。
  2. 使用 LEFT 函數從字串左側取出那麼多字元(減 1)。

獲得結果的方法不太複雜,其中最簡單的方法無疑是使用功能區「資料」標籤上的「文字到列」命令,如 @Barry 所建議。

另一種方法是使用 REGEX 模式匹配函數。此函數未內建於 Excel 中,但可以使用 VBA 程式碼建置和存取。雖然程式碼有點棘手,但網路上有幾個版本(例如這個例子)。然而,使用該功能會非常簡單。例如,取得日期的符合表達式可能類似於REGEXP("./",F8),然後可以在 DATE 函數中使用它來取得 Excel 日期值。

為了方便起見,這裡是完整形式的公式。

  =DATE(RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)),LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-1),MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1)),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)-LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1))))

答案2

貼到左側的值通常意味著它是文字值,而數字/日期值則向右對齊。

也許您也可以在 Excel 中進行可能的日期時間轉換之前檢查這些內容:

  1. 檢查您的系統語言/區域設置,尤其是日期時間格式。 Excel 使用預設的系統日期時間設置,因此不同地區的日期時間轉換會有所不同。

  2. 確保儲存格值中沒有附加額外的空格或隱藏換行符,帶有空格的有效日期時間值將被視為文字值,而不是日期時間,因此 Excel 不會自動轉換它。

  3. 使用 Excel 的自訂儲存格格式選項,您可以在其中指定自己的轉換規則,例如 DD/MM/YYYY。

答案3

大概源格式是 dd/mm/yyyy。嘗試使用“文字到列”功能進行轉換。

選擇日期列

資料>文字到列>下一步>下一步>在「列資料格式」下選擇「日期」並從下拉清單中選擇來源格式 - “DMY”>確定

答案4

Excel 中的預設資料格式為:dd/m/yyyy。左邊距不會自動轉換,因為您選擇:m/dd/yyyy。只需選擇正確的格式即可解決您的問題。

相關內容