Excel TEXT(dd.mm.yyyy)功能和不同的客户端语言

时间:2018-01-08 10:49:22

标签: excel excel-vba function excel-formula vba

如何使用适用于所有语言的格式化日期创建函数?我想做以下功能:

=CONCATENATE(TEXT(C8;"TT.MM.JJJJ");"/";G8)

这里的问题是,我使用的是英语客户,但因为我是德国人,excel强迫我使用T代表白天和J代表年份。我认为这会导致位于英格兰的PC出现问题(例如)。

我认为[$-409]不起作用,因为我仍然必须使用T代表白天和J代表年份。有没有一个很好的解决方案(功能明智)?

4 个答案:

答案 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)