
21/03/2004 不註冊為日期,而 7/3/2004 確實註冊為日期。有誰知道如何刪除月份值從 0 開始的日期值中的所有 0?
因此,黏在左邊距的列不會以某種方式自動轉換。黏在右側的列很好。
答案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 日期。我已經在上面的程式碼中分解了這三部分的計算。
年份計算如下:
- 反轉日期字串(按照上面的說明剪掉時間)。
- 使用 SEARCH 函數找到該反轉字串中第一個「/」的位置(該斜線實際上是未反轉日期字串中的第一個斜線。)
- 使用 RIGHT 函數從日期字串右側取得那麼多字元。
月份計算有以下步驟:
- 找到第一個斜線的位置未逆轉的日期字串。
- 透過計算該位置與年份計算中確定的第二個「/」的位置之間的差值,確定月份中的字元數(可以是 1 或 2)。
- 使用 MID 函數傳回第一個斜線和第二個斜線之間的字元。
Day 的計算是最簡單的。
- 使用與月份計算相同的方法計算第一個“/”的位置。
- 使用 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 中進行可能的日期時間轉換之前檢查這些內容:
檢查您的系統語言/區域設置,尤其是日期時間格式。 Excel 使用預設的系統日期時間設置,因此不同地區的日期時間轉換會有所不同。
確保儲存格值中沒有附加額外的空格或隱藏換行符,帶有空格的有效日期時間值將被視為文字值,而不是日期時間,因此 Excel 不會自動轉換它。
使用 Excel 的自訂儲存格格式選項,您可以在其中指定自己的轉換規則,例如 DD/MM/YYYY。
答案3
大概源格式是 dd/mm/yyyy。嘗試使用“文字到列”功能進行轉換。
選擇日期列
資料>文字到列>下一步>下一步>在「列資料格式」下選擇「日期」並從下拉清單中選擇來源格式 - “DMY”>確定
答案4
Excel 中的預設資料格式為:dd/m/yyyy。左邊距不會自動轉換,因為您選擇:m/dd/yyyy。只需選擇正確的格式即可解決您的問題。