Excel 民國日期轉西元日期:民國年月日文字轉換公式教學

Excel 民國日期轉西元日期時,像「民國115年9月30日」這種文字日期,不能用一條 MID 加 1911 就解決,因為月份有一位數與兩位數,MID 取出的也只是文字。這篇用贊贊小屋的實測,依序拆出年、月、日,最後用 DATE 組成真正可運算的西元日期。

Excel 民國日期轉西元日期主視覺:「民國115年9月30日」拆出年、月、日,經 DATE 重建為 2026/9/30 的流程圖

一、Excel 民國日期怎麼轉成西元日期?

民國日期轉西元日期的基本做法,是把年、月、日三個部分各自從文字裡取出來,再重新組成 Excel 看得懂的日期。這篇處理的不是「儲存格自訂格式顯示民國年」(這類做法可以參考 Excel日期格式),也不是單純把一個年份數字換算成另一種紀年,而是儲存格裡本來就寫著「民國115年10月31日」這種整段文字,必須先解析文字,再重建日期。

民國年轉西元年的基本公式

贊贊小屋在 A 欄的「民國日期」放進「民國115年10月31日」與「民國114年10月31日」兩筆資料,希望在 B 欄的「西元年份」得到 2026 與 2025。B2 輸入的公式是 =MID(A2,3,3)+1911。

這條公式的 MID 有三個引數:從 A2 的文字取值,從第 3 個字元開始,連續取 3 個字元。「民」和「國」各占一個字元,年份的第一個數字剛好是第 3 個字元,所以取出來的是 115。民國年加上 1911 就是西元年,115 加 1911 得到 2026;B3 用同樣的公式,114 加 1911 得到 2025。

這裡先帶出一個很重要的觀念:MID 本質上擷取的是文字,取出來的 115 嚴格來說是文字,並不是數值。不過這條公式後面接的是加法,Excel 在做算術運算時,會嘗試把能辨識為數字的文字轉成數值再計算,所以 B2、B3 才能順利得到 2026 與 2025。年份這一關看起來很順利,但同樣的 MID 用到月份時,就會出現問題。

Excel 以 =MID(A2,3,3)+1911 把「民國115年10月31日」「民國114年10月31日」轉成西元年份 2026、2025

二、用 MID 擷取月份,為什麼 9 月會變成「9月」?

年份在「民國」之後固定從第 3 個字元開始,月份則緊接在「年」的後面,從第 7 個字元開始。「民國115年」一共 6 個字元,所以第 7 個字元就是月份的第一個數字。接下來要看的,是用同一條 MID 公式去取 10 月與 9 月,會得到什麼不同的結果。

10 月可以正常取得 10

贊贊小屋在 C 欄的「月份」輸入 =MID(A3,7,2),也就是從第 7 個字元開始取 2 個字元。A2 是「民國115年10月30日」、A3 是「民國114年10月30日」,C2 與 C3 都得到 10,看起來完全符合預期。

10 月剛好是兩位數,從第 7 個字元取 2 個字元,取到的正好是「1」和「0」,月份後面的「月」字不會被帶進來。

9 月卻會擷取成「9月」

但 A4 是「民國115年9月30日」,同一條公式放到 C4,得到的不是 9,而是 9月。

原因出在 MID 並不知道什麼叫「月份」,它只知道「從第 7 個字元開始,連續取 2 個字元」。10 月的第 7、8 個字元是「1」「0」,9 月的第 7、8 個字元卻是「9」和「月」,所以結果就變成 10 月得到 10、9 月得到 9月。月份只要是一位數,MID 固定取 2 個字元就會多帶出後面的「月」字,後面所有的處理,都是為了解決這個差別。

Excel 以 =MID(A3,7,2) 擷取月份,10 月得到 10,「民國115年9月30日」得到「9月」

三、為什麼 Excel 會判斷「9月 >= 10」為 TRUE?

月份取出來之後,贊贊小屋先用最直覺的方式測試:既然 10 以上是兩位數月份,那就用大於等於 10 來判斷,看看哪些月份會被分到哪一邊。這一步的結果,是整個除錯過程裡最容易讓人意外的地方。

畫面看起來像 9,不代表資料就是數字 9

贊贊小屋在 D 欄輸入 =IF(C4>=10,1,0),並透過「函數引數」視窗確認。視窗裡的「Logical_test」填的是 C4>=10,右邊的計算結果是 TRUE;「Value_if_true」是 1,「Value_if_false」是 0,所以公式的計算結果是 1。D2 與 D3 同樣得到 1,而 C4 的內容明明是 9月,也被判斷成大於等於 10。

這個結果乍看不合理,因為 9 怎麼可能大於等於 10?癥結在於 C4 裡面存放的根本不是數字 9,而是 9月 這個兩個字元的文字。9 與 9月 對 Excel 而言不是同一種資料,被拿去和 10 比較的是完整的文字 "9月",不是數值 9。

要留意的是,D2、D3 得到 1,也不是因為 10 大於等於 10。C2、C3 取出來的 10,同樣是 MID 回傳的文字。Excel 在比較文字與數值時,不會先把文字轉成數字,而是依資料型態排出大小:數值小於文字。因此不論是 "10" 還是 "9月",只要是文字,拿去和數值 10 做 >= 比較,結果都是 TRUE,這個測試根本分不出 10 月與 9 月。

算術運算和比較運算的文字轉換行為不同

把這個結果和前面的年份公式對照,會發現 Excel 對文字的處理並不一致。MID(A2,3,3)+1911 是算術運算,Excel 會嘗試把文字 115 轉成數值再相加;C4>=10 是比較運算,Excel 則直接拿文字去和數值比,不做轉換。

同樣是「看起來像數字的文字」,在加法裡可以被當成數字使用,在比較裡卻仍然是文字。這正是處理文字型日期容易出錯的原因:每一個運算子與函數對文字的態度不同,不能只憑畫面上的外觀,就假設資料可以直接拿來計算或比較。

Excel「函數引數」視窗:IF(C4>=10,1,0) 的 Logical_test 對「9月」判斷為 TRUE,結果為 1 為什麼 9月 >= 10 會是 TRUE:數值 10 與文字 "10"、"9月" 比較時,文字被視為大於數值的對照知識卡

四、用 VALUE 將月份轉成數字,為什麼會出現 #VALUE!?

既然問題出在 C4 是文字,下一步很自然就是用 VALUE 函數,先把月份轉成真正的數值,再去和 10 比較。

VALUE 只能轉換「可以被辨識為數字」的文字

贊贊小屋把 D 欄的公式改成 =IF(VALUE(C4)>=10,1,0)。D2、D3 的結果仍然是 1,因為 C2、C3 的 10 經過 VALUE 變成數值 10,這次 10 大於等於 10 是真正的數值比較。但 D4 出現的是 #VALUE!,儲存格旁邊還出現了警告圖示。

為了確認錯在哪裡,贊贊小屋點開 D4 的「fx」,查看「函數引數」視窗。視窗裡的 VALUE 只有一個引數「Text」,填的是 C4,右側顯示的內容是 "9月",下方的說明是「將文字資料轉換成數字資料」,但計算結果欄位是空的。"10" 這類內容 VALUE 可以轉成 10,"9月" 卻轉不出數字,所以公式回傳 #VALUE!。

VALUE 是轉換工具,不是文字清理工具

VALUE 做的事情是「把本來就是數字樣子的文字,轉換成數值」,它不會自行判斷哪一段是數字、哪一段是多餘的文字,更不會幫忙把 9月 裡的「月」字去掉再轉成 9。

所以問題真正變成:Excel 要怎麼知道月份應該取 1 個字元,還是 2 個字元?只要在 MID 取值的當下,就能判斷月份長度,後面的 VALUE 與比較都不會有問題。而這個判斷,恰好可以從 #VALUE! 這個錯誤本身找到線索。

Excel 以 =IF(VALUE(C4)>=10,1,0) 判斷月份,10 月得到 1,「9月」出現 #VALUE! Excel 的 VALUE「函數引數」視窗:Text 為 C4 的「9月」,計算結果空白

五、用 ISERR 判斷月份是否擷取錯誤

#VALUE! 在平常是需要處理的問題,在這裡卻剛好是區分 10 月與 9 月的訊號:VALUE 成功,代表取到的是兩位數月份;VALUE 失敗,代表取到的是 9月 這類資料。要把「有沒有出錯」變成公式可以使用的條件,就需要 ISERR 函數。

ISERR 不是消除錯誤,而是判斷是否出錯

贊贊小屋在 E 欄輸入 =ISERR(D4)。ISERR 可以從「公式」索引標籤的「其他函數」,進入「資訊」選單,在清單裡找到。同一個清單裡還有 ISERROR,兩者都屬於 IS 函數,用來檢查錯誤;ISERR 會把 #N/A 以外的錯誤值判斷為 TRUE,這裡的 #VALUE! 屬於它的檢查範圍。

結果是:D2、D3 沒有錯誤,E2、E3 得到 FALSE;D4 是 #VALUE!,E4 得到 TRUE。ISERR 並沒有把錯誤修好,也沒有讓 #VALUE! 消失,它只是回答「這個儲存格是不是錯誤」這個問題,答案固定是 TRUE 或 FALSE。

把 #VALUE! 變成公式可以利用的判斷條件

整個判斷的流程可以這樣理解:

- VALUE 成功,ISERR 得到 FALSE,代表月份取到的是兩位數,例如 10。
- VALUE 失敗,ISERR 得到 TRUE,代表月份取到的是 9月 這類帶著「月」字的資料。

錯誤在這裡不再只是需要排除的麻煩,而是公式可以讀取的狀態。Excel 公式不只是計算數字,也可以利用錯誤的有無,決定接下來要走哪一條路。把這個 TRUE/FALSE 交給 IF,公式就能依錯誤的有無分流。

Excel 以 =ISERR(D4) 判斷 VALUE 是否出錯,10 月得到 FALSE、「9月」得到 TRUE,並從「公式」索引標籤的「其他函數」「資訊」找到 ISERR

六、IF 搭配 MID,自動判斷月份要抓 1 位還是 2 位

有了 E 欄的 TRUE/FALSE,剩下的就是讓 IF 依照這個結果,決定 MID 要取 1 個字元還是 2 個字元。

ISERR=TRUE 時,只抓 1 個字元

贊贊小屋在 F 欄的「月份」輸入 =IF(E4,MID(A4,7,1),MID(A4,7,2))。IF 的第一個引數直接放 E4,因為 E4 本身就是 TRUE 或 FALSE,不需要再寫成 E4=TRUE。

E4 是 TRUE,代表 A4 的月份取 2 個字元會帶到「月」字,所以公式走第一條路 MID(A4,7,1),只取 1 個字元。A4 是「民國115年9月30日」,F4 因此得到 9,不再是 9月。

ISERR=FALSE 時,維持抓 2 個字元

E2、E3 是 FALSE,公式走第二條路 MID(A2,7,2),維持取 2 個字元,所以「民國115年10月30日」與「民國114年10月30日」得到的月份都是 10。整理起來,就是:

- E 欄是 TRUE:MID(A4,7,1),取 1 個字元。
- E 欄是 FALSE:MID(A4,7,2),取 2 個字元。

F 欄最後得到 10、10、9,三筆資料的月份都只剩下數字內容,不再帶著「月」字。

這個公式成立的前提

目前這條公式是針對固定格式設計的:「民國115年9月30日」、「民國115年10月30日」這種「民國」開頭、年份三位數、月份後面接「月」的寫法。MID 的起始位置與取值長度都是寫死的,只要資料的格式改變,位置就會跟著錯開。

例如年份位數改變,像民國 99 年這種兩位數的年份,月份就不再從第 7 個字元開始;日期裡多了空格,或月、日前後的符號不同,又或者把「年月日」改成斜線分隔,固定位置的做法都需要重新設計。使用這套公式之前,先確認資料的格式是否一致,比直接套公式更重要。

Excel 以 =IF(E4,MID(A4,7,1),MID(A4,7,2)) 取月份,三筆資料得到 10、10、9

七、拆出日期後,用 DATE 組成真正的西元日期

年份有了,月份也有了,最後還剩下「日」。三個部分都備齊之後,就可以用 DATE 函數重建成真正的日期。

日期也有一位數與兩位數問題

日也會遇到和月份相同的問題:1 日是一位數,30 日是兩位數,不能假設日期永遠兩位。這次改從文字的右側回推,贊贊小屋在 G 欄的「日期」輸入:

=IF(LEFT(RIGHT(A4,4),1)="月",LEFT(RIGHT(A4,3),2),LEFT(RIGHT(A4,2),1))

為了測試一位數的日,A3 改成「民國115年10月1日」。

公式的判斷方式是這樣:RIGHT 取出字串右側的 4 個字元,再用 LEFT 看這 4 個字元的第 1 個字是不是「月」。如果是,代表日期是兩位數,例如「民國115年10月30日」右側 4 個字是「月30日」,這時用 LEFT(RIGHT(A4,3),2),從右側 3 個字元「30日」取左邊 2 個字,得到 30。如果第 1 個字不是「月」,代表日期是一位數,例如「民國115年10月1日」右側 4 個字是「0月1日」,這時用 LEFT(RIGHT(A4,2),1),從右側 2 個字元「1日」取左邊 1 個字,得到 1。G2、G3、G4 因此分別得到 30、1、30。

LEFT、RIGHT、MID 都只是文字擷取

回頭看一遍,MID 抓中間、LEFT 抓左側、RIGHT 抓右側,三個函數都只負責把文字的某一段取出來,取出來的結果依然是文字,它們不會自動建立日期。所以到目前為止,B 欄、F 欄、G 欄分別得到了年、月、日,但還沒有組成 Excel 眼中的一個日期。

用 DATE 將年、月、日組成真正的 Excel 日期

最後一步使用 DATE 函數。贊贊小屋在 H 欄的「西元日期」輸入 =DATE(B2,F2,G2),DATE 的三個引數依序是年、月、日。F2、G2 取出來的內容仍是文字,但 DATE 實測仍能正確處理。結果 H2 是 2026/10/30,H3 是 2026/10/1,H4 是 2026/9/30。

這三個結果,並不是單純把文字拼成 2026/9/30 這樣的字串,而是由 DATE 建立真正的 Excel 日期值。有了日期值,後續才能依日期排序與篩選,才能加減天數、用 YEAR、MONTH、DAY 取出各部分,也才能計算兩個日期之間相差幾天。同樣是把文字轉成日期,從八位數字文字下手的另一種做法,可以參考 Excel 8位數字轉日期。

Excel 以 LEFT、RIGHT 取出日期 30、1、30,再用 =DATE(B2,F2,G2) 得到 2026/10/30、2026/10/1、2026/9/30

Excel 民國日期轉西元日期的關鍵:先看清楚文字長什麼樣,再決定怎麼拆

回頭看整個流程,真正花功夫的地方不在 1911 這個數字。民國 115 年加 1911 是西元 2026 年,第一步就能完成;難的是「9月」與「10月」長度不同,讓同一條 MID 公式會得到兩種不同性質的結果。從 9 月竟然被判斷為大於等於 10,到 VALUE 出現 #VALUE!,再到用 ISERR 把錯誤變成判斷條件,過程中每一步遇到的問題,源頭都是文字的長度與資料型態。

這也是和「Excel 西元轉民國」那篇方向相反、問題卻相通的地方:不管是西元轉民國,還是民國轉西元,先確認手上的資料究竟是文字還是數值,再決定要用哪個函數處理,比一直換公式重試更有效率。

文字型的民國日期,沒有一條適用所有格式的萬用公式。固定格式的資料,用 MID、LEFT、RIGHT 加上 IF 判斷長度,就足以拆得乾淨;格式越雜,拆解的規則就要跟著調整。而不論拆成什麼樣,最後交給 DATE 重建,才會得到真正能排序、篩選與計算的日期。

Excel 民國日期轉西元日期的關鍵:先確認文字格式、拆出年、月、日、判斷位數,再用 DATE 重建的流程整理卡
發布日期:
分類:Excel函數教學、Excel教學