如何使用适用于所有语言的格式化日期创建函数?我想做以下功能:
=CONCATENATE(TEXT(C8;"TT.MM.JJJJ");"/";G8)
这里的问题是,我使用的是英语客户,但因为我是德国人,excel强迫我使用T代表白天和J代表年份。我认为这会导致位于英格兰的PC出现问题(例如)。
我认为[$-409]
不起作用,因为我仍然必须使用T代表白天和J代表年份。有没有一个很好的解决方案(功能明智)?
答案 0 :(得分:4)
如果您在""
中传递公式的值,则无法根据本地化设置更改公式。
这样做的一个好方法是使用VBA自定义功能,如果你在德国则返回"TT.MM.JJJJ"
,如果你在英国则返回"DD.MM.YYYY"
。
Public Function CorrectString() As String
Select Case Application.International(XlApplicationInternational.xlCountryCode)
Case 1
CorrectString = "DD.MM.YYYY"
Case 49
CorrectString = "TT.MM.JJJJ"
Case Else
CorrectString = "ERROR"
End Select
End Function
允许你像这样调用函数:
=CONCATENATE(TEXT(C8;CorrectString());"/";G8)
根据excel语言,它会提供德语或英语版本。
要简化公式,请尝试仅调用:
=TEXT(21322;CorrectString())
这应该返回17.05.1958
。
@Dan在评论中提到的区域语言来源: https://bettersolutions.com/vba/macros/region-language.htm
或运行此项以查看当前Excel的相应编号:
MsgBox xlApplicationInternational.xlCountryCode
答案 1 :(得分:0)
只需添加另一个取自Stackoverflow answer by @Taosique
的imho优雅(免费VBA)选项=IF(TEXT(1,"mmmm")="January",[some logic for English system],[some logic for non-English system])
答案 2 :(得分:0)
我遇到了相同的问题,并使用类似的VBA功能解决了该问题。我的函数接受国际格式的输入,并为用户输出本地版本。
请参见下面的代码:
Function DateFormater(sFI As String)
Dim aFI() As String
aFI = split(StrConv(sFI, vbUnicode), Chr$(0))
ReDim Preserve aFI(UBound(aFI) - 1)
For i = 0 To UBound(aFI)
Select Case (aFI(i))
Case "m", "M"
DateFormater = DateFormater & Application.International(xlMonthCode)
Case "y", "Y"
DateFormater = DateFormater & Application.International(xlYearCode)
Case "d", "D"
DateFormater = DateFormater & Application.International(xlDayCode)
Case Else
DateFormater = DateFormater & aFI(i)
End Select
Next i
End Function
答案 3 :(得分:0)
一个更简单的解决方案是使用通用Excel函数。
= CONCATENATE(TEXT(DAY(C8;“ 00”);“。”; TEXT(MONTH(C8);“ 00”);“。”; YEAR(C8);“ /”; G8)>