在Microsoft Office Excel中更改TEXT函数的语言格式

时间:2017-04-21 12:38:25

标签: excel excel-vba ms-office date-formatting vba

我搜索过很多网页,但我找不到解决以下问题的方法:

在Cell A1中,我插入了一个日期。

例如42736,(2017年1月1日)。

在Cell B1中,我想显示以下内容:

"The result is: January 2017"

在Cell B1中,公式为:

="The result is: " &TEXT(A1;"MMMM YYYY")

但是,由于我的电脑采用德国区域格式,因此我有以下两个问题:

1)月份名称是德语而不是英语

2)它不理解YYYY。

对于第二个问题,我找到了创建以下UDF的解决方案:

' standard date format regardless of excel language
Public Function STDTEXT$(ByVal Value, ByVal strFormat)
    STDTEXT = VBA.Format$(Value, strFormat)
End Function

是否有任何解决方案可以克服第一个障碍?

我想以英文返回月份名称,无论用户的本地区域设置如何。

此致

Thanasis

3 个答案:

答案 0 :(得分:1)

您可以使用创建外部表D1:E12

1   January
2   February
3   March
4   April
5   May
6   June
7   July
8   August
9   September
10  October
11  November
12  December

然后使用:

="The result is: "&VLOOKUP(MONTH(A1),$D$1:$E$12,2,FALSE)&" "&YEAR(A1)

答案 1 :(得分:0)

对于第一个问题,我使用了以下解决方法

在单独的字段/工作表中创建的语言检查:

单元格A1=NA()-只需在单元格中插入#N/A

单元格A2=FORMULATEXT(A1)-将=NA()函数转换为纯文本

单元格A3=IF(A2="=NA()", "English", IF(A2="=NV()", "German", "Other"))-打开文件时,Excel自动将功能转换为已安装的语言,英语NA变为NV(nichtverfügbar),并且单元格显示德语。

在日期单元格B1中我还使用了=IF($A$3="English", "DD.MM.YYYY", IF($A$3="German", "TT.MM.JJJJ", "ERROR (Language must be English or German"))

(尽管如果用户在Windows和Excel中使用相同的语言,则此解决方案也可以使用)。

答案 2 :(得分:0)

通过UDF进行呼叫的示例

此方法演示了如何获得独立于区域设置且仅基于单个范围参考的英语月份名称,而不是另外使用本地化格式模式。

具有单元格公式

="The result is " & endate(A1)

一个获得日期值的英语月份名称(以A1为单位),与区域设置无关:

"The result is: January 2017"

用户定义的功能EnDate()

Function EnDate$(dat#)
' Purpose: return English month name plus year
' Note:    international codes ("patterns") at https://msdn.microsoft.com/en-us/library/dd318693(VS.85).aspx
  Const EN = 409
  EnDate = Application.Text(DateSerial(6, Month(dat), 1), "[$-" & EN & "]mmmm") & " " & Year(dat)
End Function

相关链接

How to create a calendar Input in VBA Excel