
我的公司建立報告工具,匯出格式之一是 Excel。由於我們的客戶來自不同的國家,當我們產生 Excel 檔案時,我們使用區域設定格式來使用以下格式化程序顯示日期:
[$-<locale here>]mmmm d, yyyy;@
因此,如果單元格的日期為 31/03/2020 並且區域設定為愛爾蘭,則它將顯示為 2020 年 3 月 10 日,但如果區域設定為西班牙,它將顯示 2020 年 3 月 10 日
我們收到一份客戶報告,表示該方法對他們不起作用,因為他們的 2020 年 3 月 31 日日期顯示為 2020 年 3 月 8 日
經過仔細檢查,我注意到他們的格式化程序被列為:
[$-,F]mmmm d, yyyy;@
我試圖找出 Excel 試圖解析的內容,或試圖使用什麼日曆或日期格式化程式來顯示無效的偽造日期。顯然,我們需要更好地識別客戶的區域設置,但我想知道這是否可能是由於客戶的計算機中存在奇怪的區域設置或只是一些虛假代碼所致。
這種情況發生在 Excel 2013 中,但我也能夠在 Excel 365 上重現它。刪除後,,
格式化程式會將 F 識別為法國的代碼,並以法語顯示正確的日期數字:2020 年 3 月 30 日。
答案1
據我所知[$-,F]
,這相當於[$-F0000]
將日期轉換為農曆。
我想看看在相同情況下所有其他字母代表什麼,所以我寫了這樣的:
Sub formatdates()
Dim ws As Worksheet
Set ws = Sheet1
Dim i As Integer
i = 1
Do While i < 27
ws.Cells(i, 1) = "=TODAY"
ws.Cells(i, 1).NumberFormat = "[$-," & Chr(64 + i) & "]dddd, mmmm dd, yyyy"
ws.Cells(i, 2) = "[$-," & Chr(64 + i) & "]dddd, mmmm dd, yyyy"
ws.Cells(i, 3) = ws.Cells(i, 1).NumberFormat
i = i + 1
Loop
End Sub
您可以在任何空白工作簿中使用它。它將使用羅馬字母表中的每個字母作為格式代碼來顯示當前日期,其使用方式類似於帖子中的 [$-,F]。我確信還有更多,但這些足以讓我們進行一些挖掘。
例如
- [$-,F] 將為您提供農曆,但以英文顯示,例如第五個月顯示為六月
- [$-,G] 會給你印度民用日曆(我想)
- [$-,M] 會給你波斯曆(我想)
- [$-,N] 會給你回曆
我也採取了語言代碼列表來自 @DavidPostill 在他的評論中包含的鏈接(有其他人有更完整的列表我認為也可以使用國家代碼)。
我將上面註釋中連結中的程式碼表放入 Sheet2 中,並將其寫入到使用上面第一個函數創建的表的底部,只是出於興趣。
Sub formatdates2()
Dim ws As Worksheet
Set ws = Sheet1
Dim i As Integer
Dim r As Integer
r = 1
i = 28
Do While Sheet2.Cells(r, 1) <> ""
ws.Cells(i, 1) = "=TODAY()"
ws.Cells(i, 1).NumberFormat = "[$-" & Sheet2.Cells(r, 1) & "]dddd, mmmm dd, yyyy"
ws.Cells(i, 2) = "[$-," & Sheet2.Cells(r, 1) & "]dddd, mmmm dd, yyyy"
ws.Cells(i, 3) = ws.Cells(i, 1).NumberFormat
ws.Cells(i, 4) = Sheet2.Cells(r, 2)
i = i + 1
r = r + 1
Loop
End Sub
據我所知,有語言代碼(後一個列表/函數)和日曆代碼(前一個函數)。
我認為您正在尋找語言代碼。
但是,您可能會更成功地簡單地使用[$-x-sysdate]
,這是當我從「設定儲存格格式」對話方塊中「日期」下的清單中選擇所需格式,然後在「自訂」清單中查看相同格式時顯示的代碼。